私は 2 つのモデルを持ってRecipe
おりTag
、has_and_belongs_to_many
関係があります。このリレーションには、単純な結合テーブル がありRecipesTags
ます。
レシピ:
has_and_belongs_to_many :tags
鬼ごっこ:
has_and_belongs_to_many :recipes
新しいレシピを作成すると、ユーザーはレシピが属するカテゴリを「肉」、「魚」などのチェックボックスの形式で入力できるようになりました。これらのカテゴリは、実際にはデータベース内の単なるタグです。
問題: レシピにタグが保存されません。
レシピnew
とcreate
コントローラーのメソッド:
def new
@recipe = Recipe.new
@ingredients = Ingredient.all
@tags = Tag.all
respond_to do |format|
format.html # new.html.erb
format.json { render json: @recipe }
end
end
# POST /recipes
# POST /recipes.json
def create
@recipe = Recipe.new(params[:recipe])
if (params[:tags])
@recipe.tags << params[:tags]
end
respond_to do |format|
if @recipe.save
format.html { redirect_to @recipe, notice: 'Recipe was successfully created.' }
format.json { render json: @recipe, status: :created, location: @recipe }
else
format.html { render action: "new" }
format.json { render json: @recipe.errors, status: :unprocessable_entity }
end
end
end
景色:
<%= form_for(@recipe, :html => {:multipart => true}) do |f| %>
<% if @recipe.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(@recipe.errors.count, "error") %> prohibited this recipe from being saved:</h2>
# [ fields that get's saved for the recipe and works fine ]
<% @tags.each do |t| %>
<%= f.label t.name %>
<%= f.check_box :tags, t.name %>
<br />
<% end %>
<%= f.submit 'Submit recipe', :class => 'btn btn-primary' %>
<% end %>
現時点では、次のようなエラー メッセージが表示されます: undefined method `merge' for "Meat":String
「肉」はタグ名です。
それで、私はここで何が間違っていますか?