我有两个模型彼此有一定的关系。
我有一个用餐模型和一个 *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 的事实使我认为 rails 认为这是一对一的关系,并且没有创建关系表。
我创建了一个联接表。这是它的架构:
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>