首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从rails中的多个check_box中获取哈希值?

如何从rails中的多个check_box中获取哈希值?
EN

Stack Overflow用户
提问于 2018-12-28 19:03:17
回答 1查看 445关注 0票数 0

在我的应用程序中,一些倍数元素之间有一个N到M的关系。所以,我想删除表单上的所有这些关系。为此,我在表单中包含一个check_box,并希望将N.id和M.id传递给我的控制器。

一切都顺利地交给了我的控制员。但是,当我试图检索这些值时,我遇到了一个错误。

代码语言:javascript
运行
复制
    <% 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} %>

在我的控制器里我得到:

代码语言:javascript
运行
复制
selected_product_lots = params[:product_lots]

selected_product_lots.each do |element|
  logger.debug("#{element[:bol_id]}")
end    

如果我在我的params:product_lots上做了一个打印,我有:

代码语言:javascript
运行
复制
["{:bol_id=>3086, :product_lot_id=>6021}"] 

因此,我想知道如何从每个元素获得bol_id和product_id。现在,当我尝试这样做的时候,我遇到了一个错误:

代码语言:javascript
运行
复制
#{element[:bol_id]}"


no implicit conversion of Symbol into Integer 
EN

Stack Overflow用户

回答已采纳

发布于 2018-12-28 19:39:03

看看check_box_tag的api

代码语言:javascript
运行
复制
check_box_tag(name, value = "1", checked = false, options = {}) 
  • 第一个参数是名称:值存储在什么下面,这通常显示在params中。
  • 第二个参数是值,为了生成html标记,会对其进行字符串化。
  • 第三,开始检查状态。
  • 最后是选择

因此,由于要将对象传递给值,rails调用该对象的.to_s以创建html标记。这就是为什么要获得no implicit conversion of Symbol into Integer错误的原因,因为您正在调用字符串上的[…],该字符串返回字符串的第n个字符。不幸的是,这不是最好的错误消息,因为它没有提到您正在访问一个字符串,而不是一个散列,而且对于一个数组,它也是相同的错误消息。您可能想要的是序列化该值,以便以后可以取消序列化:

  • 尝试在第二个参数上调用.to_json。这应该会将params[:product_lots]中的值更改为['{"bol_id": 3086, "product_lot_id": 6021}']
  • 请注意,这仍然是一个字符串,因此您需要反序列化它(尽管rails可能会根据配置和筛选器等自动反序列化它)。
  • 试试params[:product_lots].map!{|data| JSON.parse(data, object_class: HashWithIndifferentAccess)}。这将为您提供一个散列数组(无动于衷,因此您可以使用符号键)。(另见Json::parse)
  • 你现在可以得到你想要的值了
  • 考虑在操作/筛选之前将其移动到助手中,以便能够多次使用它,可能用于多个参数。
票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53963189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档