在我的应用程序中,一些倍数元素之间有一个N到M的关系。所以,我想删除表单上的所有这些关系。为此,我在表单中包含一个check_box,并希望将N.id和M.id传递给我的控制器。
一切都顺利地交给了我的控制员。但是,当我试图检索这些值时,我遇到了一个错误。
<% duplicated.each do |element|%>
<tr id="row_user_<%=element["product_lot"].id%>">
<td><%= check_box_tag "product_lots[]", {:bol_id => element["bill_of_lading"].id, :product_lot_id => element["product_lot"].id} %>在我的控制器里我得到:
selected_product_lots = params[:product_lots]
selected_product_lots.each do |element|
logger.debug("#{element[:bol_id]}")
end 如果我在我的params:product_lots上做了一个打印,我有:
["{:bol_id=>3086, :product_lot_id=>6021}"] 因此,我想知道如何从每个元素获得bol_id和product_id。现在,当我尝试这样做的时候,我遇到了一个错误:
#{element[:bol_id]}"
no implicit conversion of Symbol into Integer 发布于 2018-12-28 19:39:03
看看check_box_tag的api
check_box_tag(name, value = "1", checked = false, options = {}) 因此,由于要将对象传递给值,rails调用该对象的.to_s以创建html标记。这就是为什么要获得no implicit conversion of Symbol into Integer错误的原因,因为您正在调用字符串上的[…],该字符串返回字符串的第n个字符。不幸的是,这不是最好的错误消息,因为它没有提到您正在访问一个字符串,而不是一个散列,而且对于一个数组,它也是相同的错误消息。您可能想要的是序列化该值,以便以后可以取消序列化:
.to_json。这应该会将params[:product_lots]中的值更改为['{"bol_id": 3086, "product_lot_id": 6021}']。params[:product_lots].map!{|data| JSON.parse(data, object_class: HashWithIndifferentAccess)}。这将为您提供一个散列数组(无动于衷,因此您可以使用符号键)。(另见Json::parse)https://stackoverflow.com/questions/53963189
复制相似问题