我是初学者,我很感激答案,帮助我了解我的知识差距在哪里:
该应用是显示帖子。帖子属于一个类别(开胃菜,主菜......)我的想法是使用范围在一个视图中显示帖子上的所有开胃菜然后在另一个视图中有主菜等等。
模特:
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
在视图中,我想循环浏览类别名称为“Appetizers”的帖子。
<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
这让我得到了一个我想要的结果页面但是如下面评论的那样它有点乱,如果你有很多类别,它将无法很好地扩展。
我正在寻找一种更清洁的方法。任何建议都会很棒。
答案 0 :(得分:1)