我想像github那样使用嵌套的网址,就像How do I route user profile URLs to skip the controller?一样,但不确定如何继续使用它。
例如,查看他们拥有的提交:':user /:repo / commit /:sha',控制器正在提交。我如何复制这种类型的嵌套资源?
谢谢你:)答案 0 :(得分:1)
怎么样
map.connect ':user/:repo/commit/:sha', :action => :index
如果您需要RESTful路线,请使用map.resource
代替map.connect
。
在控制器中,可以从params中检索URL信息,例如params[:user]
返回用户名。
答案 1 :(得分:1)
如果commit是RESTful控制器,它使用:sha而不是id来查找记录。你可以这样做:
map.resource :commits, :path_prefix => ':user/:repo', :as => 'commit'
它将创建看起来像http://yoursite.tld/:user/:repo/commit/:id
同样,如果你永远不会将url中的id部分转换为提交id,那么你没有理由不能将它用作:sha值。
示例:
class CommitController < ApplicationController
def show
@commit = Commit.find(:first, :conditions => {:sha => params[:id]})
end
...
end
您可能还想在提交模型中过度使用to_param来返回sha值。
class Commt < ActiveRecord::Base
...
def to_param
sha
end
end
现在link_to commit_url(@commit, :user => current_user, :repo => @repo)
将提供与您的方案匹配的网址。
答案 2 :(得分:0)
您可以根据需要为路线命名,并指定您希望将其用于哪些控制器和操作。
例如,您可能有:
map.connect ':user/:repo/commit/:sha', :controller => 'transactions', :action => 'commit'
这会将请求发送到'transactions'控制器中的'commit'方法。
然后可以使用params在控制器中访问其他变量:
@user = User.find(params[:user])
@repo = Repo.find(params[:repo])