如何根据Rails中的请求方法路由到不同的操作?

时间:2011-01-07 13:15:29

标签: ruby-on-rails rest routing ruby-on-rails-3 crud

众所周知,一个简单的

resources :meetings

将为我生成7个动作。其中两个是indexcreate。关于这两个的一个非常酷的事情!:两者的URL都是/meetings,但是当我获得/meetings时,我被路由到def index操作,当我发布/meetings时,我被路由到def create行动。好的。

现在我想这样做:

resources :meetings do
  member do
    get  'scores'
    post 'scores'
  end
end

并且,您猜对了!我希望他们在MeetingsController中路由到不同的操作:GETting /meetings/1/scores将路由到def scores,POST到meetings/1/scores将路由到def create_scores

3 个答案:

答案 0 :(得分:4)

尝试:

resources :meetings do
  member do
    get  'scores' => :scores
    post 'scores' => :create_scores
  end
end

我想你也会对命名路线感兴趣:

resources :meetings do
  member do
    get  'scores' => :scores, :as => 'scores_of'
    post 'scores' => :create_scores, :as => 'create_scores_of'
  end
end

然后你会得到scores_of_meeting_pathcreate_scores_of_meeting_path帮助者。

以上可能会更多地被干掉:

get :scores, :as => 'scores_of'

答案 1 :(得分:1)

定义如下的路线:

resources :meetings do
  member do
    get 'scores', :action => "scores"
    post 'scores', :action => "post_scores"
  end
end

但是听起来我觉得创建另一个控制器来处理这个更容易,因为对我而言,得分完全是另一种资源,即使他们没有自己的模型关联。

答案 2 :(得分:1)

哈!永远不要低估提出问题以引导您回答的能力。

resources :meetings do
  member do
    get  'scores', :to => "meetings#scores"
    post 'scores', :to => "meetings#create_scores"
  end
end