我有以下型号
class Recipe < ActiveRecord::Base
has_many :recipe_ingredients
has_many :ingredients, through: :recipe_ingredients
end
class Ingredient < ActiveRecord::Base
has_many :recipe_ingredients
has_many :recipes, through: :recipe_ingredients
end
class RecipeIngredient < ActiveRecord::Base
belongs_to :recipe
belongs_to :ingredient
end
我已经通过rails控制台检查了这个has_many通过多对多关系运行良好。
连接表RecipeIngredient中有一个属性,在模式中是:
t.text&#34;金额&#34;
我想显示来自Ingredient的名称以及与食谱相关的RecipeIngredient的数量。
我在RecipeController的show动作中包含以下几行:
def show
@recipe = Recipe.includes(:ingredients).find(params[:id])
end
这里的食谱/ show.html.erb:
<% title @recipe.name %>
<div class="col-md-12">
<div class="group">
<%= link_to("Edit", edit_recipe_path(@recipe), class: "btn btn-primary pull-right")%>
</div>
<h2><%= @recipe.name %></h2>
<p><%= @recipe.description %></p>
<ul>Ingredients:
<% @recipe.ingredients.each do |i| ri = i.recipe_ingredients.where("recipe_id: ?", @recipe.id) %>
<li><%= link_to(i.name, ingredient_path(i)) %></li>
<p><%= ri.amount %></p>
<% end %>
</div>
上面的代码在没有连接表部分的情况下运行良好。但是在引入之后,Recipes#show中出现了一个NoMethodError,告诉这是一个未定义的方法。
如何访问该值呢?
答案 0 :(得分:0)
@recipe.ingredients.select('ingredients.*, recipe_ingredients.amount').each do |i|
<li><%= link_to(i.name, ingredient_path(i)) %></li>
<p><%= i.amount %></p>
end
- 可能是您可以使用该特定属性的代表&#34;金额&#34;
答案 1 :(得分:0)
如果您想将连接表属性设置为可编辑字段,则需要使用嵌套属性。
在配方模型中
accepts_nested_attributes_for :recipe_ingredients
并在视图中
fields_for :recipe_ingredients
# f.field :amount