我有两个彼此有一定关系的模特。
我有一个餐模型和一个* 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.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.meal_food,它会返回与该餐有关的所有食物。 rails问我for meal_id这一事实让我觉得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>
答案 0 :(得分:1)
据我所知,您的has_and_belongs_to_many
关联错误,您需要在两个模型中都有:
class MealFood < Food
has_and_belongs_to_many :meals
end
class Meal < ActiveRecord::Base
has_and_belongs_to_many :meal_foods
end
此外,模型需要复数,have a look at this guide。
然后,您需要使用meal_foods_meals
和meal_id
整数列创建meal_food_id
联接表。
然后要访问您的关联,您必须使用复数形式:
meal.meal_foods.create
如果您想使用has_many
/ belongs_to
插件,则仍需要复数has_many
class MealFood < Food
belongs_to :meal
end
class Meal < ActiveRecord::Base
has_many :meal_foods
end
答案 1 :(得分:-1)
只需将您的模型更改为:
class Meal < ActiveRecord::Base
belongs_to :user
has_many :meal_food
attr_accessible :user_id, :meal_id
end
注意:完全重复的问题here。