协会挑战

时间:2015-12-04 20:10:59

标签: ruby-on-rails associations

我是rails的新手,我陷入了一个关联问题。我在膳食和食材之间建立了多对多的联系。我使用茧来制作膳食形式,但问题是:我必须在我的餐中设定每种成分的数量,但我不能将其存储在配料数据库中,因此我将此列设置在膳食数据库中。我能做什么?我应该为数量制作另一个型号吗?我可以使用其他任何关联吗?

这是我的git回购: https://github.com/betinhosaad/inutree

To illustrate my question and making another one about totals =P

  

已编辑。我改变了我的数据库,并将:quantity放入了   连接器。之后我使用了binding.pry并检查了参数   我在创建动作中收到了:

 "meal"=>{"name"=>"quatro",
 "ingredients_attributes"=>{"1449271563126"=>{"name"=>"quatro",
 "unit"=>"und",
 "carb"=>"4",
 "prot"=>"4",
 "fat"=>"4",
 "ing_quantity"=>"4",
 "_destroy"=>"false"}}},
 "commit"=>"Create Meal"
     

这个ing_quantity是我在成分中定义的一个动作   模型并在_ingredient_fields.html.erb中调用<%= f.text_field :ing_quantity, required: true, class: "form-control" %>   和

class Ingredient < ActiveRecord::Base
 has_many :meal_ingredients
 has_many :meals, through: :meal_ingredients 

def ing_quantity
    meal_ingredients(:quantity)
  end

  def ing_quantity=(quantity)
    self.meal_ingredients = MealIngredient.find_or_create_by(quantity: quantity)
  end
end
     

现在我收到此错误:undefined method 'each' for <MealIngredient:0x007f9c7ecc5b10>

     

我不知道这是否是一个愚蠢的问题而且我已经花了太多钱   时间在此,无法正确思考,但无法弄清楚怎么可能   我将数量直接发送到meal_ingredients表,然后将这些值关联起来

1 个答案:

答案 0 :(得分:1)

我会创建一个belongs_to每个项目的连接模型。您可以使用如下的生成器:bundle exec rails g model meal_ingredient meal:references ingredient:references quantity:integer,它将生成以下模型。

class MealIngredient&lt;的ActiveRecord :: Base的   belongs_to:饭   belongs_to:成分 端

然后,您需要更新Meal以获得: has_many :meal_ingredients has_many :ingredients, through: :meal_ingredient

并将Ingredient更新为: has_many :meal_ingredients mas_many :meals, through: :meal_ingredients 如果您希望从成分实例访问相关模型,则只需在成分上添加has_many

然后,您可以创建MealIngredient个实例并在实例上设置数量。