【问题标题】:Why is this route in Rails 3 with a custom action not working? (better way?)为什么带有自定义操作的 Rails 3 中的这条路线不起作用? (更好的方法?)
【发布时间】:2011-04-14 08:16:21
【问题描述】:

我的 routes.rb 中有以下代码:

match 'users/linkedin' => "users#linkedin", :as => :register_linkedin

我的期望是,当我有一个 redirect_to register_linkedin_url 时,我将被重定向到 domain.com/users/linkedin。

这应该会导致控制器用户的操作被执行。

这是我在日志中得到的:

重定向到 http://localhost:3000/users/linkedin 完成 302 发现时间为 28333 毫秒

开始 GET "/users/linkedin" for 127.0.0.1 于 2011 年 4 月 14 日星期四 01:12:01 -0700 处理 用户控制器#显示为 HTML
参数:{"id"=>"linkedin"} 在 94 毫秒内完成

这就是我在“rake routes”中得到的:

register_linkedin
/users/linkedin(.:format)
{:action=>"linkedin", :controller=>"用户"}

所以路线不能正常工作。我该如何解决这个问题?

【问题讨论】:

    标签: ruby-on-rails-3 routes


    【解决方案1】:

    这是因为您可能在路由中使用了resources :users

    如果您想保留您的show 操作,并且也使用linkedin 部分,请将您的自定义路由放在resources :users 之前

    这样做,如果请求是特定的(用户/linkedin),路由将匹配linkedin,如果不是,将继续搜索,下一个当然是show

    阅读更多关于一般路由的信息here

    【讨论】:

    • 嗨,我该怎么办?我仍然使用“显示”用户——这只是创建新用户的自定义版本,不适用于设计
    • 好吧,就是这样 --- 但我意识到如果可以的话,我应该以某种方式找到使用“新”操作的方法。
    【解决方案2】:

    路由按照定义的顺序进行匹配。将更具体的路线放在比不太具体的路线更高的位置。

    在您的情况下,只需确保在定义更通用的 resources :users 路由之前为 users/linkedin 定义自定义路由。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多