更改到控制器的路由

时间:2013-04-01 18:15:20

标签: ruby-on-rails-3 routes

我有一个基本的应用程序,我试图根据meeting_id和participant_id(这是meeting_participants中的列)销毁名为meeting_participants的表中的记录。

我已更改了meeting_participants_controller中的destroy操作,接受了meeting_id和participant_id,然后删除了相应的记录。

def destroy
  session[:return_to] = request.referer

  @meeting_participant = MeetingParticipant.find_by_meeting_id_and_participant_id(params[:meeting_id], params[:participant_id])
  @meeting_participant.destroy

  redirect_to session[:return_to]

end

我想在视图中使用一个按钮来调用meeting_participants#destroy controller,使用以下代码。

<table>
  <% @participants.each do |participant| %>
      <tr>
        <td><%= participant.name %></dt>
        <td>
          <% participant.meetings.each do |meeting| %>
            <%= meeting.name %>
            <%= button_to( "Remove Meeting", 
                                           {:controller => "meeting_participants",
                                            :action => "destroy",
                                            :meeting_id => meeting.id,
                                            :participant_id => participant.id },
                             :method => :delete,
                             :confirm => "Are you sure?") %>
             <br/>
           <% end %>
         </td>
       </tr>
     <% end %>
  </table>

我认为我已成功将正确的participant_id和meeting_id参数发送到控制器,但我收到“无路由匹配”错误,因为我的meeting_participants#destroy的路由正在期待单个:id参数。耙路线给...

meeting_participant DELETE /meeting_participants/:id(.:format)      meeting_participants#destroy

有没有人知道改变我的路线以期望两个新参数而不是id的方法?或者也许有一个更好的方法。我觉得路线很混乱。

感谢。

我的routes.rb文件是......

MyApp::Application.routes.draw do
  resources :meeting_participants

  resources :participants

  resources :meetings

end

1 个答案:

答案 0 :(得分:1)

我可能会创建一个处理该请求的路由。也许是这样的:

match '/delete_meeting_participants/meeting/:meeting_id/participant/:participant_id' => 'meeting_participants#delete_meeting_participants', :as => 'delete_meeting_participants'

然后,在您的控制器中,您将拥有一个名为delete_meeting_participants的动作,该动作在您的销毁动作中具有相同的逻辑。显然,您必须使用新创建的操作的名称更新button_to