我是一个初学者,我很感激能帮助我了解我的知识差距在哪里的答案:
该应用程序用于显示帖子。这些帖子属于一个类别(开胃菜,主菜......)我的想法是使用范围在一个视图中显示帖子上的所有开胃菜,然后在另一个视图中显示主菜,依此类推。
型号:
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
这为我提供了一个包含我想要的结果的页面,但正如下面评论的那样,它有点混乱,如果你有很多类别,就不能很好地扩展。
我正在寻找一种更清洁的方法来做到这一点。任何建议都会很棒。