为什么alt_user_path(@user)链接到user_path(@user)?

时间:2014-12-15 17:23:41

标签: ruby-on-rails ruby ruby-on-rails-4 path routes

对于模型User,我有两个单独的视图,一个名为show,另一个名为alt。我尝试在链接到show视图的alt视图上构建链接,但出于某种原因,它只链接回show视图。 Show仅由标准的资源路径路径定义。

的routes.rb

get "users/:id_alt", :to => "users#alt", :as => :alt_user
resources :users

视图/用户/ show.html.erb

<%= link_to "Alt", alt_user_path(@user) %>

例如,在users / 2的show view上,上面的链接链接回users / 2。如何将其链接到users / 2_alt?

3 个答案:

答案 0 :(得分:0)

您想要的正确路由是:

resources :users do
  get 'alt', on: :member
end

然后,您可以使用<%= link_to 'Alt', alt_user_path(@user) %>,它会生成类似/users/2/alt的墨迹,并使用控制器操作UsersController#alt

答案 1 :(得分:0)

路由无法正常工作的原因是:id_alt指定用户模型的属性。例如,如果您在控制台中为ID为2的模型键入users.id_alt,您是否希望返回“2_alt”?

我建议路由到users / 2 / alt,因为它更加RESTful。但是,如果您在用户/ 2_alt上设置了死区,则可以检查字符串插值#{}。

答案 2 :(得分:0)

如果您想拥有像/users/2_alt这样的路线,则需要配置用户模型:

class User < ActiveRecord::Base
   def to_param
       id + "_alt"
   end
end

编辑: 我之前对你的问题不太了解,所以请允许我更新我的答案。

这显然会将/ user / 2_alt映射到show动作。我想如果你想继续这种方式你最好的拍摄是在控制器中添加逻辑:

class UserController < ApplicationController 
   def show
       if params[:id] =~ /\d_alt/
           # alt action logic
       else
           # show action logic
       end
   end
end