我的应用程序中有一个profile
模型。 我想允许用户通过/profile
查看自己的个人资料,所以我创建了这条路由:
resource :profile, :only => :show
我还希望用户能够通过/profiles/joeblow
查看其他用户的个人资料,所以我创建了以下路由:
resources :profiles, :only => :show
问题是,在第二种情况下,我想使用一个:id
参数来查找配置文件。 在第一种情况下,我只想使用登录用户的配置文件。
这就是我用来找到正确配置文件的方法,但我想知道是否有更合适的方法来做到这一点。
class ProfilesController < ApplicationController
before_filter :authenticate_profile!
before_filter :find_profile
def show
end
private
def find_profile
@profile = params[:id] ? Profile.find_by_name(params[:id]) : current_profile
end
end
编辑:这种方法的问题之一是我的路线。 如果不传递配置文件/ID 参数,我就不可能调用profile_path
,这意味着每当我需要链接到那里时,我都必须使用字符串"/profile"。
$ rake routes | grep profile
profile GET /profiles/:id(.:format) {:action=>"show", :controller=>"profiles"}
GET /profile(.:format) {:action=>"show", :controller=>"profiles"}
您的路线:
resource :profile, :only => :show, :as => :current_profile, :type => :current_profile
resources :profiles, :only => :show
然后是你的ProfilesController
class ProfilesController < ApplicationController
before_filter :authenticate_profile!
before_filter :find_profile
def show
end
private
def find_profile
@profile = params[:type] ? Profile.find(params[:id]) : current_profile
end
end
您的Profile
模型
class Profile < AR::Base
def to_param
name
end
end
视图:
<%= link_to "Your profile", current_profile_path %>
<%= link_to "#{@profile.name}'s profile", @profile %>
# or
<%= link_to "#{@profile.name}'s profile", profile_path( @profile ) %>
另外:如果配置文件是模型,则您