将布尔参数传递给rails控制器?

时间:2012-08-27 20:01:17

标签: ruby-on-rails controller parameter-passing

我有一个名为: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的帖子?是的。

  • 我是否应该在控制器中使用单独的方法来处理仅显示已发布帖子的情况?
  • 我可以改变索引方法来处理传递给它的参数吗?
  • link_to会是什么样的?

2 个答案:

答案 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) %>