Rails:如何呈现“show”视图的不同版本

时间:2014-12-08 02:28:42

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

我有一个模型“用户”。我在我的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])

任何人都知道如何解决此错误或以另一种方式完成此事?

1 个答案:

答案 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_pathuser_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