嵌套资源自定义更新方法上的路由问题

时间:2015-11-30 01:55:53

标签: ruby ruby-on-rails-4 routes nested-routes

我在Rails 4 Ruby 2中构建一个Rails应用程序

  

背景

我在控制器中构建了一个自定义方法,允许我通过按钮单击更新表。

我有一些帮助构建按钮,但它只更新嵌套元素中的第一个id。

我正在寻找所说的按钮,当它被推到仅定位它所在的行项目时。

  

按钮/链接:

<%= link_to "Remove Unit", [@call, responding], class: 'btn btn-danger btn-sm', method: :delete, confirm: "Are you sure you want to remove this unit?" %><%= link_to "Responding", unit_responding_update_call_responding_path(call_id: @call.id, id: @respondings.first.id), method: :patch %>

此按钮显示在<%= @respondings.each do |responding| %>中,并应填充添加的每个订单项,以便在推送时更新该记录。

  

控制器操作为:

    def unit_responding_update
    @call = Call.find(params[:call_id])
    @responding = Responding.find(params[:id])
    @responding.responding_tme = DateTime.now
    @responding.responding = "true"
    @responding.on_scene = "false"
    @responding.clear = "false"
    @responding.save!
      respond_to do |format|
      if @responding.save
        format.html { redirect_to @call, notice: "Responding time successfully updated." }
      else
        format.html { render action: 'edit' }
      end
    end
   end
  

Routes.rb是:

  resources :calls do
    resources :respondings, except: [:index], controller: 'calls/respondings' do
      member do
        patch :unit_responding_update
      end
    end
      resources :pings, except: [:index], controller: 'calls/pings'
      resources :agencies, except: [:index], controller: 'calls/agencies'
      resources :incidents, except: [:index], controller: 'calls/incidents'
      resources :complainants, except: [:index], controller: 'calls/complainants'
    end
  end

最后,自定义操作的Rake Routes输出为:

 unit_responding_update_call_responding PATCH  /calls/:call_id/respondings/:id/unit_responding_update(.:format) calls/respondings#unit_responding_update

我知道它可能只是一个小问题,我看过类似StackOverflow问题,树屋论坛和代码学院资源,但不能为我的生活排序这个..

预先感谢您的协助。如果您需要任何进一步的信息,请告诉我。

1 个答案:

答案 0 :(得分:1)

  

但是它只更新嵌套元素中的第一个id。

这是由

引起的

<%= link_to "Responding", unit_responding_update_call_responding_path(call_id: @call.id, id: @respondings.first.id), method: :patch %>

由于此按钮显示在&lt;%= @ responds.each do | respond |中%&gt ;,替换为

<%= link_to "Responding", unit_responding_update_call_responding_path(call_id: @call.id, id: responding.id), method: :patch %>