របៀបបង្កើតទម្រង់បែបបទ (form) ជាមួយ Rails

នៅក្នុងអត្ថបទមុន Techfree បានរៀបរាប់អំពី របៀបដំឡើង RubyOnRails។ ចំណែកថ្ងៃនេះយើងនឹងបង្ហាញអត្ថបទមួយទាក់ទងទៅនឹង របៀបបង្កើតទម្រង់បែបបទ (form) ជាមួយ Rails។

ដើម្បីអោយ Rails បង្ហាញថា “Hello”, អ្នកចាំបាច់ត្រូវបង្កើត controller និង view យ៉ាងហោចណាស់មួយ។ គោលបំណងរបស់ controller គឺដើម្បីទទួលសំណើជាក់លាក់សម្រាប់កម្មវិធី។ Routing ជាអ្នកសម្រេចថា controller មួយណាបានទទួលនូវសំណើរមួយណា។ គោលបំណងរបស់ view គឺដើម្បីបង្ហាញព័ត៌មានក្នុងទ្រង់ទ្រាយដែលមនុស្សអាចអាន។ ភាពខុសគ្នាសំខាន់ដើម្បីបង្កើតគឺវាជា controller មិនមែនជា view ជាកន្លែងដែលបានប្រមូលព័ត៌មាន។

ដើម្បីបង្កើត controller ថ្មីមួយអ្នកនឹងចាំបាច់ត្រូវដំណើរការប្រតិបត្តិការ “controller” ហើយប្រាប់វាថាអ្នកចង់អោយវាហៅ controller “Welcome” ជាមួយនឹងការហៅសកម្មភាព “index” ដូចខាងក្រោម៖

bin/rails generate controller Welcome index

Rails នឹងបង្កើតឯកសារមួយចំនួននិង route មួយសម្រាប់អ្នក៖

create app/controllers/welcome_controller.rb
route get 'welcome/index'
invoke erb
create app/views/welcome
create app/views/welcome/index.html.erb
invoke test_unit
create test/controllers/welcome_controller_test.rb
invoke helper
create app/helpers/welcome_helper.rb
invoke assets
invoke coffee
create app/assets/javascripts/welcome.coffee
invoke scss
create app/assets/stylesheets/welcome.scss

ឯកសារសំខាន់ៗនៃ controller ទាំងនេះគឺស្ថិតនៅ app/controllers/welcome_controller.rb ហើយ view ស្ថិតនៅ app/views/welcome/index.html.erb។ សូមចូលទៅថតឯកសាររបស់អ្នកដើម្បីមើល៖

rails24

បើកឯកសារ app/views/welcome/index.html.erb ជាមួយកម្មវិធីនិពន្ធអត្ថបទណាមួយរបស់អ្នក។ លុបកូដទាំងអស់ដែលមានស្រាប់នៅក្នុងឯកសារនេះហើយជំនួសវាដោយកូដមួយបន្ទាត់ដូចខាងក្រោម៖

form

ដំណើរការកម្មវិធី Rails ហើយបើកកម្មវិធីមើលវេបសាយរបស់អ្នក នោះនឹងបង្ហាញ៖

form1

បន្ទាប់មកទៀតអ្នកត្រូវតែប្រាប់ Rails ថាទំព័រដើមរបស់អ្នកមានទីតាំងស្ថិតនៅត្រង់ណា។ បើកឯកសារ config/routes.rb ជាមួយកម្មវិធីនិពន្ធអត្ថបទរបស់អ្នក ហើយសរសេរកូដ៖

form2

នៅត្រង់បន្ទាត់ទី ៤ គឺកន្លែងដែលអ្នកប្រាប់ពីទីតាំងទំព័រដើមរបស់អ្នក។

បន្ទាប់មកអ្នកត្រូវបង្កើត resource ថ្មីមួយ។ Resource គឺជាពាក្យដែលបានប្រើសម្រាប់ការប្រមូលផ្ដុំនៃវត្ថុស្រដៀងគ្នាដូចជាអត្ថបទ មនុស្ស ឬសត្វជាដើម។ អ្នកចាំបាច់ត្រូវបន្ថែម article resource ទៅឯកសារ config/routes.rb ដូចខាងក្រោម៖

form3

ប្រសិនបើអ្នកដំណើរការពាក្យបញ្ជា bin/rails routes អ្នកនឹងឃើញថាវាត្រូវបានបានកំណត់ routes សម្រាប់សកម្មភាពស្ដង់ដារដែលនៅសល់ទាំងអស់

$ bin/rails routes
Prefix Verb   URI Pattern                  Controller#Action
articles GET    /articles(.:format)          articles#index
POST   /articles(.:format)          articles#create
new_article GET    /articles/new(.:format)      articles#new
edit_article GET    /articles/:id/edit(.:format) articles#edit
article GET    /articles/:id(.:format)      articles#show
PATCH  /articles/:id(.:format)      articles#update
PUT    /articles/:id(.:format)      articles#update
DELETE /articles/:id(.:format)      articles#destroy
root GET    /                            welcome#index

ជាមួយនឹង route ដែលបានកំណត់រួចទៅហើយ, សំណើឥឡូវនេះអាចត្រូវបានធ្វើឡើងទៅជា /articles/new នៅក្នុងកម្មវិធី។ ចូលទៅអសដ្ឋាន http://localhost:3000/articles/new ហើយអ្នកនឹងឃើញ routing error៖

routing_error_

កំហុសនេះកើតឡើងដោយសារតែ route ចាំបាច់ត្រូវមាន controller ដែលបានកំណត់នៅក្នុងគោលបំណងដើម្បីការស្នើរសុំនេះ។ ដំណោះស្រាយទៅនឹងបញ្ហានេះគឺសាមញ្ញ៖ បង្កើត controller ដែលមានឈ្មោះថា ArticlesController។ អ្នកអាចវាយពាក្យបញ្ជាដូចខាងក្រោម៖

bin/rails generate controller Articles

ប្រសិនបើអ្នកទៅមើលអ្វីដែលទើបបានបង្កើតឡើង app/controllers/articles_controller.rb អ្នកនឹងឃើញ controller មួយដែលទទេរ៖

form4

Controller មួយគឺគ្រាន់តែជា class ដែលត្រូវបានកំណត់ដើម្បី inherit ពី ApplicationController មួយ។ វានៅក្នុង class ដែលអ្នកនឹងកំណត់វិធីសាស្រ្តដែលនឹងក្លាយទៅជា actions សម្រាប់ controller នេះ។ ប្រសិនបើអ្នកដំណើរការ http://localhost:3000/articles/new អ្នកនឹងឃើញកំហុសថ្មី៖

unknown_action

កំហុសនេះបង្ហាញថា Rails មិនអាចរកឃើញ action ថ្មីនៅខាងក្នុង ArticlesController ដែលអ្នកទើបតែបង្កើត។ នេះគឺដោយសារតែនៅពេលដែល controllers ត្រូវបានបង្កើតក្នុង Rails ដែលពួកគេគឺទទេតាមលំនាំដើមលុះត្រាតែអ្នកប្រាប់ actions ដែលចង់បានអំឡុងពេលដំណើរការជំនាន់នេះ។ ដើម្បីកំណត់ action នៅខាងក្នុង controller, អ្វីដែលអ្នកត្រូវធ្វើគឺកំណត់វិធីសាស្រ្តមួយនៅក្នុង controller នេះ។ បើកឯកសារ app/controllers/articles_controller.rb ហើយនៅក្នុង class ArticlesController កំណត់វិធីសាស្រ្តថ្មីនេះដូច្នេះ controller របស់អ្នកឥឡូវនេះមើលទៅដូចនេះ៖

form5

ជាមួយនឹងវិធីសាស្រ្តថ្មីដែលបានកំណត់នៅក្នុង ArticlesController ប្រសិនបើអ្នកដំណើរការ http://localhost:3000/articles/new នោះនឹងឃើញកំហុសមួយផ្សេងទៀត៖

template_is_missing

ហេតុនេះហើយបានជាឯកសារគួរត្រូវបានគេហៅគឺ articles/new.html.erb ហើយត្រូវស្ថិតនៅក្នុងថតនៃ app/views នៅក្នុងកម្មវិធី។ បន្ទាប់មកបង្កើតឯកសារថ្មី app/views/articles/new.html.erb ហើយសរសេរដូចនេះ៖

form6

ពេលអ្នកដំណើរការ http://localhost:3000/articles/new នឹងបង្ហាញដូចខាងក្រោម៖

form7

ដើម្បីបង្កើតទម្រង់បែបបទនៅក្នុងទំព័រគំរូនេះអ្នកនឹងប្រើ form builder មួយ។ ការបង្កើតទម្រង់បែបបទចម្បងសម្រាប់ Rails គឺត្រូវបានផ្តល់ដោយវិធីសាស្រ្តជំនួយដែលគេហៅថា form_for។ ដើម្បីប្រើវិធីសាស្រ្តនេះ បន្ថែមកូដនេះចូលទៅក្នុង app/views/articles/new.html.erb

 

form8

នោះយើងនឹងបានទម្រង់បែបបទដូចខាងក្រោម៖

form9