在form_for中传递多个对象,使用命名空间一次更新所有对象

时间:2014-05-07 00:08:05

标签: ruby-on-rails ruby

我尝试使用admin命名空间在rails form_for中传入多个对象。我收到的错误是“未定义的方法' model_name' for Array:Class

这是我试图运行的观点:

<%= form_for [:admin, @observation_reads] do |f|  %>
    <div class="table-responsive">
      <table class="table table-bordered table-striped table-hover">
    <% @observation_reads.each do |observation_read| %>
           <tr>
             <ul class="admin-employee">
               <td><%= check_box_tag "observation_read_ids[]", observation_read.id %></td>
               <td><li><%= observation_read.employee_id_observer %></li></td>
               <td><li><%= select_tag(observation_read.id, options_for_select(@readers))  %></li></td>
               <td><li><%= select_tag(observation_read.id, options_for_select(@readers))  %></li></td>
               <td><li><%= select_tag(observation_read.id, options_for_select(@readers))  %></li></td>
             </ul>
           </tr>
       <% end %>
      </table>
     </div>
   <%= f.submit %>
 <% end %>

我希望能够一次传入多个对象,因此我可以将所有对象更新为一次。我认为还有几个问题正在发生。我不知道为什么我在控制器中有一个NilClass,我可以调用我的所有观察结果:

def index
   @observation_reads = ObservationRead.all
   @readers = Reader.all.map { |reader| [reader.first_name, reader.id] }
end

我有一种感觉,如果我通过此错误,我会遇到路由问题,因为当我使用form_tag重新设置时,我可以{I} no route matches当我匹配我的路线时。

namespace :admin do
  get '', to: 'dashboard#index', as: '/'
  resources :readers, only: [:index]
  resources :observations
end

我的路线在这里: http://imgur.com/o2o7SHT

任何人都可以帮忙:

  1. 如何传递此错误消息
  2. 传递表单中的多个对象
  3. 根据正在传递的这些对象更新表单。
  4. 以下是我与之合作的观点。我在这篇文章中简化了它。

    http://imgur.com/pjeANCB

2 个答案:

答案 0 :(得分:1)

您收到错误是因为您将Array传递给form_for

<%= form_for [:admin, @observation_reads] do |f|  %>

您应该将ObservationRead而非ObservationRead.all的实例传递给form_for

form_for做了什么?

  

创建一个允许用户创建或更新属性的表单   一个特定的模型对象。

答案 1 :(得分:0)

这样做,

  form_for :observations, url: [:admin, :observations] do

   form_for :observations, url: admin_observations_path