【问题标题】:Rails 3.2 form_for for all database entriesRails 3.2 form_for 用于所有数据库条目
【发布时间】:2014-02-16 19:11:54
【问题描述】:

我想创建一个页面,我可以在其中一次编辑所有条目。 例如,我有 10 台设备,此时,我正在创建一个 html 表格,每行都有一个设备,可以编辑每一行而无需额外点击。

我已经尝试过这些东西(index.html.erb)

<% @devices.each do |device| %>
<%= render 'form', locals: { device: @device }%>
or
<%= render 'form', :collection => :device %>
or
<%= render 'form', :device %>
<% end %>

我的表单部分

<%= form_for @device do |f| %>
<td><%= f.submit %></td>
<td><%= f.name%></td>
<td><%= f.type</td>
<td>Style app</td>
<td></td>
<td></td>
<% end %>

但我仍然收到此错误 NilClass:Class 的未定义方法“model_name”

有人知道吗?

谢谢

【问题讨论】:

    标签: ruby-on-rails form-for


    【解决方案1】:

    从您的尝试看来,您已经非常接近了。如果您尝试将其渲染为部分内容会怎样?

    <% @devices.each do |device| %>
      <%= render partial: 'form', locals: { device: device } %>
    <% end %>
    

    这里的另一个区别是第二行 device 参数的范围。

    【讨论】:

      【解决方案2】:

      你需要改变你的局部变量……你正在渲染全局变量,你需要渲染局部变量……

      所以,这就是你的解决方案:

      <% @devices.each do |device| %>
      <tr>
          <%= render 'form', locals: { device: device }%>
      </tr>
      

      <%= form_for device do |f| %>
      

      在这里,您应该只在@devices 中使用@...别处。

      编辑:不要忘记你的&lt;tr&gt;&lt;/tr&gt;

      【讨论】:

      • 我认为你的意思是你说全局变量的实例变量。
      • 实际上都不是。 @ 表示变量在本地范围之外是可访问的,所以我称之为全局。也许 public 更准确。
      • 不,我认为是视图上下文的实例变量。
      • 好的,没有异议。但是,partial 中的 @device 既不是在上下文中定义的,也不是在上下文之外定义的,所以它将是 nil。
      猜你喜欢
      • 1970-01-01
      • 2013-09-06
      • 1970-01-01
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多