gpt4 book ai didi

ruby-on-rails - Rails - 如何使用表单上的隐藏字段来传递与在表单上创建的对象相关的对象的值?

转载 作者:数据小太阳 更新时间:2023-10-29 07:23:55 24 4
gpt4 key购买 nike

我正在尝试从一个从 hidden_​​field 创建 device 的表单中传递一个 rfid_tag。设备 has_many rfidsrfid 已存在于数据库中。

这是表单中的代码:

<th>RFID Tag #</th>
<td>
<%= f.label(:@passed_rfid_tag, @passed_rfid_tag) %>
<%= f.hidden_field :rfid_tag, :value => @passed_rfid_tag %>
</td>
</tr>

这是来自 devices_controller 的代码:

def create
@cabinet = Cabinet.find(params[:device][:cabinet_id])
@device = Device.create(params[:device])
@device.rfids << Rfid.where('rfid_tag' => params[:rfid_tag]).first
@device.row_id = @cabinet.row_id
@device.save

我收到以下错误,因为 rfid_tag 不是 device 的属性。它是 rfid 的一个属性:

Can't mass-assign protected attributes: rfid_tag

app/controllers/devices_controller.rb:182:in `create'

谢谢。

最佳答案

发生批量分配错误是因为您将 :rfid_tag 作为 params[:device] 属性散列的一部分传递。

在您的示例代码中,需要使用 hidden_​​field_tag 表单助手提供 :rfid_tag 字段。这将防止它被包含在 params[:device] 散列中。

<tr>
<th>RFID Tag #</th>
<td>
<%= label_tag 'rfid_tag', 'RFID Tag' %>
<%= hidden_field_tag 'rfid_tag', @passed_rfid_tag %>
</td>
</tr>

然后您可以通过 params[:rfid_tag] 访问它。您的 create 方法应该仍然有效。

关于ruby-on-rails - Rails - 如何使用表单上的隐藏字段来传递与在表单上创建的对象相关的对象的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15419055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com