【问题标题】:Associations in Rails 3Rails 3 中的关联
【发布时间】:2012-11-08 05:26:24
【问题描述】:

我有一个应用程序,它允许用户添加食谱,然后选择他们最喜欢的食谱以在他们的会员区查看,我可以选择一个最喜欢的,我得到 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 %>

然后我得到错误 undefined method disc_name

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

任何帮助表示赞赏

【问题讨论】:

    标签: ruby-on-rails-3 associations


    【解决方案1】:

    你得到未定义的菜名,因为你最喜欢的模型没有这样的属性。

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

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

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

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

    【讨论】:

    • 我明白你在说什么,这是有道理的,因为我必须从配方模型中获取参数,谢谢你清除它,但是我现在得到未定义的方法配方......你建议的是是吗?
    • 没错。我明白了,它给你一个未定义的方法配方的原因是因为你从 current_user.favourites 得到的是一个 Favourite 数组。你需要做的是遍历数组,然后你就可以做你想做的事了。让我更新我的答案
    【解决方案2】:

    收藏夹只是保持关系。 您可以通过

    访问食谱
    @favourites.recipe
    

    这将是一个食谱对象并包含您的属性,例如菜名等。

    【讨论】:

    • 我明白你在说什么,这是有道理的,因为我必须从配方模型中获取参数,谢谢你清除它,但是我现在得到未定义的方法配方......你建议的是是吗?
    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多