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

cha*_*doh 3 rest routing ruby-on-rails crud ruby-on-rails-3

众所周知,一个简单的

resources :meetings
Run Code Online (Sandbox Code Playgroud)

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

现在我要这样做:

resources :meetings do
  member do
    get  'scores'
    post 'scores'
  end
end
Run Code Online (Sandbox Code Playgroud)

而且,您猜对了!,我希望它们路由至以下不同的操作MeetingsController:GETting /meetings/1/scores将路由至def scores,POSTPOST meetings/1/scores将路由至def create_scores

ger*_*tas 5

尝试:

resources :meetings do
  member do
    get  'scores' => :scores
    post 'scores' => :create_scores
  end
end
Run Code Online (Sandbox Code Playgroud)

我想您也会对命名路由感兴趣:

resources :meetings do
  member do
    get  'scores' => :scores, :as => 'scores_of'
    post 'scores' => :create_scores, :as => 'create_scores_of'
  end
end
Run Code Online (Sandbox Code Playgroud)

然后,你scores_of_meeting_pathcreate_scores_of_meeting_path助手。

以上内容可通过以下方法进一步干燥:

get :scores, :as => 'scores_of'
Run Code Online (Sandbox Code Playgroud)