Rails控制器 - 添加自定义操作

时间:2012-08-02 11:23:03

标签: ruby-on-rails model-view-controller controller routes

我有一个文章资源,并为它定义了资源丰富的路线。我想创建一个显示当前用户文章的简单页面。我知道可以通过添加另一个操作来实现,例如“搜索”到文章控制器,它将包含搜索具有相同用户ID的文章的自定义代码。对于路线:

resources :articles do
  get 'search'
end

但我不确定在这种情况下添加自定义操作是否是一个好主意。我想我仍然可以使用索引操作(显示所有文章)并从URL传递某种参数,以便它可以区分用户是想要查看所有文章还是只是他自己的文章。但我不确定如何做到这一点。任何帮助都会很棒。谢谢!

2 个答案:

答案 0 :(得分:1)

您可以使用查询字符串传递参数。见here 所以你可以传递类似.../articles?user_id=2的内容 在您的控制器中,只需根据user_id参数更改行为。

答案 1 :(得分:1)

您无需为其创建新的操作/视图。

您可以添加小表单来过滤all articles或仅my articles,例如:

<%= form_tag articles_path, method: :get do %> 
    <%= radio_button_tag :search, "all", :checked => true %>
    <%= label_tag :all %><br />

    <%= radio_button_tag :search, "my" %>
    <%= label_tag :my_articles %><br />

    <%= submit_tag "filter", name: nil %>
<% end %> 

比你的控制器:

def index
  if params[:search] == 'my'
    @articles = current_user.articles
  else
    @articles = Article.all
end