【问题标题】:Routing for custom controller actions自定义控制器操作的路由
【发布时间】:2011-12-03 15:42:16
【问题描述】:

我正在尝试开发一个允许用户对链接进行投票的 reddit 风格网站。投票功能超出了resources :links 支持的基本 CRUD 我已经编写了向上/向下操作并将它们链接到视图,但我不确定如何处理路由。有人可以演示我如何路由到自定义控制器操作吗?我在下面附上了我的文件。谢谢

我在加载视图时收到此错误

No route matches {:controller=>"links", :action=>"up"}

链接控制器https://gist.github.com/1272577

查看https://gist.github.com/1272580

路由https://gist.github.com/1272584

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 model-view-controller routing


    【解决方案1】:

    您可以使用此示例扩展resources 映射:

    resources :links do
      member do
        match :up
        match :down
      end
    end
    

    这些操作必须在 LinksController 类中可用(与新建、创建...相同)。 更多内容请参见Ruby on Rails Guide: Rails Routing

    提示:改变实体状态的动作不应该使用 GET 动词。这是因为搜索机器人或加速器可能会跟随您的投票链接。 您的链接应该是:

    <%= link_to "+", up_link_path, :method => :post, :rel => 'nofollow' %>
    

    并且在控制器中应该只在if request.post? 内修改你的实体。您仍然应该支持 GET 不会导致 404。

    【讨论】:

    • 我更新了路由文件并运行了“rake routes”,但这个解决方案不起作用。我还用“put”替换了“post”,因为我正在尝试更新属性,也没有解决它。
    • 我将“post”更改为“put”并修改了我的视图链接&lt;%= link_to '+', up_link_url(link), :method =&gt; :put %&gt; &lt;%= link.points %&gt;感谢您的帮助。
    猜你喜欢
    • 2012-06-19
    • 1970-01-01
    • 1970-01-01
    • 2011-12-06
    • 2011-11-24
    • 2011-05-09
    • 2013-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多