我的模型关系没有按预期工作

时间:2013-04-04 01:55:25

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.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.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>

2 个答案:

答案 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_mealsmeal_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