【问题标题】:Change a route to a controller更改到控制器的路由
【发布时间】:2013-04-02 02:45:37
【问题描述】:

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

我已将 meeting_participants_controller 中的销毁操作更改为接受 meeting_id 和参与者 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 控制器。

<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>

我认为我已成功将正确的参与者 ID 和会议 ID 参数发送到控制器,但我收到“无路由匹配”错误,因为我的 meeting_participants#destroy 路由需要一个 :id 参数。 rake routes 给...

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

【问题讨论】:

  • 你能发布你的 routes.rb 吗?这就是您需要对传入请求中的参数进行更改的地方。

标签: ruby-on-rails-3 routes


【解决方案1】:

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

match '/delete_meeting_participants/meeting/:meeting_id/participant/:participant_id' =&gt; 'meeting_participants#delete_meeting_participants', :as =&gt; 'delete_meeting_participants'

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

【讨论】:

  • 嗨,德怀特,这听起来是个不错的解决方案。我尝试过应用它,但收到错误config/routes.rb:8: syntax error, unexpected tIDENTIFIER, expecting keyword_end
  • 我会再次查看路线文档,因为我对此感到困惑。
  • 谢谢。好像我忘记了结尾的单引号。我已经更新了我的答案。这可能是造成它的原因。
  • 德怀特——我也看到了,并认为我已经用额外的报价尝试过。但我尝试将您的文本直接复制到 routes.rb 中,效果很好。非常感谢您对我的帮助 - 我会继续阅读这些文档。
猜你喜欢
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 2015-03-07
  • 2018-01-30
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 2023-03-27
相关资源
最近更新 更多