2015-08-10 3 views
0

У меня есть следующие модели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 

Я проверил через рельсы консоли, что has_many через многие-ко-многим хорошо работает.

Существует один атрибут в таблице соединения RecipeIngredient в схеме это:

t.text «количество»

Я хотел бы, чтобы отобразить название от ингредиента и сумму от RecipeIngredient, связанную с рецептом ,

Я включил следующие строки в шоу действия RecipeController в:

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> 

Приведенный выше код работает хорошо без присоединения части таблицы. Но после того, как он был введен, появляется NoMethodError in Recipes # show, говоря, что это неопределенный метод.

Как я могу получить доступ к значению тогда?

ответ

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 

- может быть и можно использовать делегатов для конкретного атрибута «количество»

+0

огромное спасибо, это работает. могу ли я спросить, что лучше всего сделать, если я хочу сделать этот атрибут редактируемым? – ccycecilyip

0

Если и хотите, чтобы присоединиться к таблице атрибутов, как редактируемые поля, и нужно использовать вложенные атрибуты.

В Recipe модели

accepts_nested_attributes_for :recipe_ingredients 

и в представлении

fields_for :recipe_ingredients 
# f.field :amount 
+0

он не работает, ничего не редактируется, как я должен упорядочить свой код таким образом, чтобы он выглядел как show.html.erb, отображающий название ингредиента, но количество редактируемого? – ccycecilyip

Смежные вопросы