我有一个模型“用户”。我在我的routes.rb中用resources :users
定义了它。我希望能够呈现同一用户的不同版本。为了看它是否有用,这是我在我的路线中尝试的内容.rb:
get "users/:id_alt", :to => "users#alt", :as => :user
并在我的控制器中:
def show
@user = User.find(params[:id])
end
def alt
@user = User.find(params[:id])
end
但是当我导航到users/1
时,我收到了这个错误:
ActiveRecord::RecordNotFound in UsersController#alt
Couldn't find User without an ID
并且错误指向def alt
下的这一行:
@user = User.find(params[:id])
任何人都知道如何解决此错误或以另一种方式完成此事?
答案 0 :(得分:0)
这是因为您设置了使用:id_alt
get "users/:id_alt", :to => "users#alt", :as => :user
因此控制器假设该位置的值应该具有名称:id_alt not:id。您无法以这种方式设置这两条路线,但您可以这样做:
get "users/alt/:id_alt", :to => "users#alt", :as => :alt_user
get "users/:id", :to => "users#show", :as => :user
您将能够使用这些路径方法:alt_user_path
和user_path
你的控制器应该是这样的:
def show
@user = User.find(params[:id])
end
def alt
@user = User.find(params[:id_alt])
render :show
end
运行rake routes
会产生以下结果:
alt_user GET /users/alt/:id_alt(.:format) users#alt
user GET /users/:id(.:format) users#show