我有一个名为:published的布尔对象的post对象。控制器中索引的定义如下所示:
def index
@posts = Post.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @posts }
end
end
这链接到该页面:
<%= link_to 'All posts', posts_path %>
让我们说我想要只显示post.published的帖子?是的。
答案 0 :(得分:3)
理论上,为了按关键字/类别过滤结果,可以通过参数在同一个控制器中显示逻辑。我会这样做:
<%= link_to 'All posts', posts_path(:published => true) %>
然后在你的控制器/索引动作中:
def index
@posts = Post.all
@posts = @posts.where(:published => true) if params[:published].present?
...
要重构代码,我会在模型中确定方法的范围,例如:
scope :published, where(:published => true)
然后在你的控制器中你可以拥有:
@posts = @posts.published if params[:published].present?
有关链接/模型范围的更多信息:http://guides.rubyonrails.org/active_record_querying.html#scopes
答案 1 :(得分:2)
为了保持简单(没有范围),请执行以下操作
def index
@posts = if params[:published].present?
Post.where(:published => true)
else
Post.all
end
...
然后添加与params的链接
%= link_to 'Published Posts', posts_path(:published => true) %>