0

我是一个初学者,我很感激能帮助我了解我的知识差距在哪里的答案:

该应用程序用于显示帖子。这些帖子属于一个类别(开胃菜,主菜......)我的想法是使用范围在一个视图中显示帖子上的所有开胃菜,然后在另一个视图中显示主菜,依此类推。

型号:

class Post < ActiveRecord::Base
attr_accessible :body, :category_id, :title

belongs_to :category

#wrong: scope :appetizers, -> { where(post.category.name => "Appetizers")}

#corrected scope per Frederick Cheung     
scope :appetizers, ->{joins(:category).where(:categories => {:name => "Appetizers"})}
end


class Category < ActiveRecord::Base
attr_accessible :name

has_many :posts
end     

在视图中,我想遍历类别名称为“开胃菜”的帖子。

<table>
  <tr>
    <th>Title</th>
    <th>Body</th>
    <th>Category </th>
  </tr>

  <% @post.each do |post| %>
  <tr>
    <td><%= post.title %></td>
    <td><%= post.body %></td>
    <td><%= post.category.name%></td>
  </tr>
  <% end %>

  <%= link_to "Appetizers", appetizers_posts_path %>

 </table> 

这需要我设置路线:

  get 'posts/appetizers' => 'posts#appetizers', :as => 'appetizers_posts'

我还必须添加到后控制器:

 def appetizers
  @posts = Post.appetizers
   render 'index' 
 end

这为我提供了一个包含我想要的结果的页面,但正如下面评论的那样,它有点混乱,如果你有很多类别,就不能很好地扩展。

我正在寻找一种更清洁的方法来做到这一点。任何建议都会很棒。

4

1 回答 1

1

我发现这个教程很有帮助,希望对你也有帮助

http://www.jacopretorius.net/2012/02/scopes-in-rails.html

干杯

于 2013-04-28T15:02:04.163 回答