对于模型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?
答案 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