Rails 4 - 在视图

时间:2015-08-10 13:37:23

标签: ruby-on-rails-4

我有以下型号

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,告诉这是一个未定义的方法。

如何访问该值呢?

2 个答案:

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