English 中文(简体)
Complex Rails Routing
原标题:

I would like to do something like github has with nested urls, and like How do I route user profile URLs to skip the controller? but not really sure how to go on with it.

For example, looking at a commit they have: :user/:repo/commit/:sha , with the controller being commit. How would I replicate this type of nested resource?

thank you :)

最佳回答

If commit is a RESTful controller that uses :sha instead of an id to find records. You could do this instead:

map.resource :commits, :path_prefix =>  :user/:repo , :as =>  commit 

It will create the standard RESTful routes that look like http://yoursite.tld/:user/:repo/commit/:id

Again, if you ll never be translating the id portion in the url to a commit id, then there s no reason you can t use it as a :sha value.

example:

class CommitController < ApplicationController
  def show
    @commit = Commit.find(:first, :conditions => {:sha => params[:id]})
  end
  ...
end

You may also want to over ride to_param in the commit model to return the sha value.

class Commt < ActiveRecord::Base
  ...
  def to_param
    sha
  end
end

So that now link_to commit_url(@commit, :user => current_user, :repo => @repo) will provide a url that matches your scheme.

问题回答

How about

map.connect  :user/:repo/commit/:sha , :action => :index

Or use map.resource instead of map.connect if you need a RESTful route.

In the controller, the URL information can be retrieved from params, for example params[:user] returns the username.

You can name your routes as you like, and specify which controllers and actions you d like to use them with.

For example, you might have:

map.connect  :user/:repo/commit/:sha , :controller =>  transactions , :action =>  commit 

This would send the request to the commit method in transactions controller.

The other variables can then be accessed in your controller using params:

@user = User.find(params[:user])
@repo = Repo.find(params[:repo])




相关问题
rails collection_select vs. select

collection_select and select Rails helpers: Which one should I use? I can t see a difference in both ways. Both helpers take a collection and generates options tags inside a select tag. Is there a ...

SSL slowness in EC2

We ve deployed our rails app to EC2. In our setup, we have two proxies on small instances behind round-robin DNS. These run nginx load balancers for a dynamically growing and shrinking farm of web ...

Auth-code with A-Za-z0-9 to use in an URL parameter

As part of a web application I need an auth-code to pass as a URL parameter. I am currently using (in Rails) : Digest::SHA1.hexdigest((object_id + rand(255)).to_s) Which provides long strings like : ...

RubyCAS-Client question: Rails

I ve installed RubyCAS-Client version 2.1.0 as a plugin within a rails app. It s working, but I d like to remove the ?ticket= in the url. Is this possible?

activerecord has_many :through find with one sql call

I have a these 3 models: class User < ActiveRecord::Base has_many :permissions, :dependent => :destroy has_many :roles, :through => :permissions end class Permission < ActiveRecord::...

Ordering a hash to xml: Rails

I m building an xml document from a hash. The xml attributes need to be in order. How can this be accomplished? hash.to_xml

Text Editor for Ruby-on-Rails

guys which text editor is good for Rubyonrails? i m using Windows and i was using E-Texteditor but its not free n its expired now can anyone plese tell me any free texteditor? n which one is best an ...

How to get SQL queries for each user where env is production

I’m developing an application dedicated to generate statistical reports, I would like that user after saving their stat report they save sql queries too. To do that I wrote the following module: ...

热门标签