【问题标题】:Rails Controllers - Adding a Custom ActionRails 控制器 - 添加自定义操作
【发布时间】:2012-07-31 08:41:03
【问题描述】:

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

resources :articles do
  get 'search'
end

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 嗯..我现在真的不需要过滤器。基本上,我只是想要一个指向页面的链接,所以我在想是否可以在 url 中传递一个参数。
    【解决方案2】:

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

    【讨论】:

    • 顺便说一句。你也可以使用嵌套资源路由做类似的事情,在用户资源下添加嵌套的文章资源,但是这里可能有点矫枉过正。
    • 太好了,正是我需要的。我会将它传递给 link_to 方法并修改控制器的索引操作。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多