RailsでFormを表示してみる
RailsをMySQLに対応させてみるの続き
(RailsのMySQLの環境にアクセスできるようにしておくも済ませておく)
RailsでFormを表示してみる。
とりあえずUserのモデルとテーブルを作っておく。
$ rails generate model user name:string gender:integer category:integer flag:boolean comment:text $ rake db:migrate
ちなみに「type」というカラム名を使うとエラーになる。 【参考】 Trouble | CreativeStyle http://kadoppe.com/archives/tag/trouble
Formを表示してみる
下記のようなコントローラを作成。
$ vi app/controllers/sample_controller.rb
class SampleController < ApplicationController def index @user = User.new end def update render :json => params[:user] end end
updateメソッドにPOSTできるようにする。
$ vi config/routes.rb
post 'sample/update' => 'sample#update' ←追加
ViewにFormを書く。
$ mkdir app/views/sample
$ vi app/views/sample/index.html.erb
<%= form_for(@user, :url => {:controller => 'sample', :action => 'update'}) do |f| %> <%= f.text_field :name %><br /> <%= f.radio_button :gender, 1 %>男 <%= f.radio_button :gender, 2 %>女<br /> <%= f.select :category, {'カテゴリ1' => 1 , 'カテゴリ2' => 2, 'カテゴリ3' => 3} %><br /> <%= f.check_box :flag %>フラグ<br /> <%= f.text_area :comment %><br /> <%= f.submit "決定" %><br /> <% end %>
デフォルトだと「/users」にPOSTしようとするので :urlに:controllerと:actionを指定している。
下記のようにブラウザに表示される。
{"name":"あああ","gender":"2","category":"3","flag":"1","comment":"いいい\r\nううう"}
Formの内容をFormに再表示させる
updateの内容を下記のように修正し、受け取ったパラメタでuserオブジェクトを作成する。
$ vi app/controllers/sample_controller.rb
class SampleController < ApplicationController def index @user = User.new end def update user_params = params.require(:user).permit(:name, :gender, :category, :flag, :comment) @user = User.new(user_params) render :action => :index end end
Rails4では下記のような書き方はNGらしい @user = User.new(params[:user]) 【参考】 ActiveModel::ForbiddenAttributesError(StrongParameter)エラー - 頑固二徹 http://nitetsu4.blog.fc2.com/blog-entry-5.html
form_tag
form_tagなどの・・・_tag系のメソッドで下記のように書くこともできる
$ vi app/views/sample/index.html.erb
<%= form_tag('/sample/update') do %> <%= text_field_tag 'user[name]', @user.name %><br /> <%= radio_button_tag 'user[gender]', 1, (@user.gender == 1) %>男 <%= radio_button_tag 'user[gender]', 2, (@user.gender == 2) %>女<br /> <%= select_tag 'user[category]', options_for_select([['カテゴリ1', 1], ['カテゴリ2', 2], ['カテゴリ3', 3]], @user.category) %><br /> <%= check_box_tag 'user[flag]', true, @user.flag %>フラグ<br /> <%= text_area_tag 'user[comment]', @user.comment %><br /> <%= submit_tag '決定' %><br /> <% end %>
参考
フォーム(form) - Railsドキュメント
http://railsdoc.com/form