互いに特定の関係を持つ 2 つのモデルがあります。
私は食事モデルと *meal_food* モデルを持っています。
ここにそれらは私が現時点で書いているとおりです:
class MealFood < Food
has_and_belongs_to_many :meal
end
class Meal < ActiveRecord::Base
belongs_to :user
has_many :meal_food
attr_accessible :user_id
end
次のような食事用のmeal_foodを作成しようとするときはいつでも:
meal.meal_food.create()
次のエラーが表示されます。
ActiveRecord::UnknownAttributeError: unknown attribute: meal_id
次のようなものを渡すと:
meal.meal_food.create(meal_id:meal.id)
次のエラーが表示されます。
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes: meal_id
私が期待しているのは、meal_food が作成され、それが作成された食事に関連付けられることです。しかし、それは多くの食事をすることができます。したがって、meal.meal_food をクエリすると、その食事に関連付けられているすべての食品が返されると予想されます。Railsがmeal_idを要求しているという事実は、これが1対1の関係であり、関係テーブルが作成されていないとRailsが考えていると私に思わせます。
Join テーブルを作成しました。そのスキーマは次のとおりです。
create_table "meals_meal_food", :force => true do |t|
t.integer "meal_id"
t.integer "meal_food_id"
end
また、食事モデルを次のように変更しました。
class Meal < ActiveRecord::Base
belongs_to :user
has_and_belongs_to_many :meal_foods
attr_accessible :user_id
end
エラーは次のとおりです。
meal.meal_food.create()
>> NoMethodError: undefined method `meal_food' for #<Meal id: 1, user_id: 1>