我是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表,然后将这些值关联起来
答案 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
个实例并在实例上设置数量。