rails4でチェックボックスを使って同じモデルに配列で5個の文字列を保存したいのですがうまくできません。
作りたいものは、ユーザーがポストするときにそのポストに自分でタグ付けをできるようにすることです。
postモデルが親で、タグモデルが子の関係の関連付けをしました。
accepts_nested_attributes_for
を使って作成しています。
post.rb
class Post < ActiveRecord::Base has_many :tags accepts_nested_attributes_for :tags end
tag.rb
class Tag < ActiveRecord::Base belongs_to :post end
schemafileはこんな感じです。
タグモデルの中には、外部キーであるpost_id
と、タグの種類を文字列で保存するためのstring型のcategory
カラムがあります。
create_table "tags", force: :cascade do |t| t.string "category" t.integer "post_id" end
postコントローラー
にはtagモデルに関係する記述はストロングパラメーターのみです。
class PostsController < ApplicationController private def post_params params.require(:post).permit(:content, :image, tags_attributes: [:category]) end end
ビューです
<%= form_for @post do |f| %> <%= f.file_field :image, :id => 'post_post_img' %> <%= f.text_area :content %> <%= f.fields_for :tags, Tag.new do |tag| %> <label><%= tag.check_box_tag :category,{},'background' %>バックグラウンド</label> <label><%= tag.check_box :category,{},'translation' %>翻訳</label> <label><%= tag.check_box :category,{},'trivia' %>豆知識</label> <label><%= tag.check_box :category,{},'interpretation' %>解釈</label> <label><%= tag.check_box :category,{},'other' %>その他</label> <% end %> <% end %>
こうすると、複数にチェックしても最後にチェックした値か、どれか一つにチェックした場合、0
の値が送られてしまいます。
<%= form_for @post do |f| %> <%= f.file_field :image, :id => 'post_post_img' %> <%= f.text_area :content %> <%= f.fields_for :tags, Tag.new do |tag| %> <label><%= tag.check_box_tag :category,{},'background' %>バックグラウンド</label> <% end %> <%= f.submit %> <% end %>
このように、バックグラウンドのみのチェックボックスを表示させて送信すると、ちゃんとcategory
カラムにbackground
が保存されます。
これをちゃんと配列でモデルに保存したいのですがどのようにやれば良いでしょうか?
最終的には、@post.tag.where(category:"background").present?
みたいな感じで、値を取り出すのが目標です。
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。