0

我有一个应用程序,它允许用户添加食谱,然后选择他们最喜欢的食谱以在他们的会员区查看,我可以选择一个最喜欢的,我得到 user_id、recipe_id 并给它一个 favourite_id。

我想做的是将实际食谱输出到我的视图中(作为收藏夹),例如菜名、country_of_origin 等。我可以使用实际食谱而不是收藏夹来执行此操作。我需要为此使用 has_many_through 吗?

我的模型看起来像这样

用户

has_many :recipes
has_many :favourites

食谱

belongs_to :user
has_many :ingredients 
has_many :preperations
has_many :favourites

最爱

belongs_to :user
belongs_to :recipe

attr_accessible :user_id, :recipe_id

我的控制器

  @favourites = current_user.favourites

我的链接发布

 <%= link_to "Add to favorites",  {:controller => 'favourites', :action => 'create', :recipe_id => r.id}, {:method => :post } %>

我可以列出当前用户的食谱,这是我的控制器

@recipes = current_user.recipes if current_user.recipes

然后像这样将它们输出到视图

 <% @recipes.each do |r| %>
 <tr>
 <td><%= r.dish_name %></td>
 <td><%= r.country_of_origin %></td>
 <td><%= r.difficulty %></td>
 <td><%= r.preperation_time %></td>
 <td><%= ingredient_names(r.ingredients) %></td>
 <td><%= preperation_steps(r.preperations) %></td>
 <td><%= image_tag r.avatar.url(:thumb)%></td>
 <tr>

所以如果我在视图中这样做

 <li><%= @favourites %></li>

我得到这个输出

 <Favourite id: 16, user_id: 8, recipe_id: 21, created_at: "2012-11-07 20:24:39", updated_at: "2012-11-07 20:24:39">]

如果我尝试

 <%= @favourites.dish_name %>

然后我得到错误未定义的方法dish_name

我如何让配方模型的参数显示在视图中。我很抱歉只是无法解决,我猜这应该很容易吗?

任何帮助表示赞赏

4

3 回答 3

1

你得到 undefined disc_name 因为你最喜欢的模型没有这样的属性。

@favourites = current_user.favourites返回收藏夹对象的数组。

在你看来,你会做类似的事情

 <% @favourites.each do |f| %>
   <%= f.recipe %>
 <% end %>

这将显示您 current_user 最喜欢的所有食谱。您可以缩小范围以显示特定的食谱或其他什么。

于 2012-11-07T21:10:32.517 回答
1

最喜欢的只是保持关系。您可以通过以下方式访问食谱

@favourites.recipe

然后它将是一个食谱对象并包含您的属性,如 disc_name 等。

于 2012-11-07T21:07:02.893 回答
1

@favourites 是一个数组,是吗?然后,您必须遍历 @favourites 并单独处理每个元素,如下所示:

<% @favourites.each do |favorite| %>
  <%= favorite.recipe.dish_name %>    
<% end %>
于 2012-11-07T21:23:46.653 回答