【问题标题】:Rails - Tagging with has_many through and select2Rails - 通过和 select2 使用 has_many 进行标记
【发布时间】:2014-10-15 04:58:49
【问题描述】:

我正在使用 has_many through 关系实现 select2 标记。我的实现有两种不同的场景。

  1. 选择菜单允许多个(标记),但不允许动态输入到选择菜单中。
  2. 与上述相同,但使用 ajax 允许用户即时输入新的选择值。

场景 1 非常适合标记。方案 2 似乎工作(可以执行标记),但不保存值。我的问题似乎归结为我的场景输入元素。

场景 1 用途:

<%= f.association :repairers, label_method: :rep_name, value_method: :id, include_blank: true, label: 'Repairer'%>

当提交表单时,会给出类似于:

"repairer_ids"=&gt;["", "1132", "1131"]

场景 2 用途:

<%= f.hidden_field :repair_type_id, :class => "required on-the-fly-select select"%>

并使用大量 js 代码来实现选择菜单的动态输入。提交表单后,数据将如下所示:

"repair_type_id"=&gt;"5688,5690"

所以在场景 2 中,id 不会作为数组提交。我尝试将选择更改为:

<%= hidden_field_tag("repair_item[repair_type_ids][]", "", :id => "repair_item_repair_type_ids", :class => "required on-the-fly-select select") %>

但随后相关参数提交错误且不保存:

"repair_type_ids"=&gt;["5688,5690"]

是否可以从 场景 2 中获取参数以 Rails 在 场景 1 中制作参数的格式提交?

【问题讨论】:

  • 为什么不能使用split ruby​​ 方法将该数据字符串转换为数组并存储到数据库中

标签: ruby-on-rails ruby-on-rails-4 jquery-select2 has-many-through


【解决方案1】:

试试String#split

repair_type_id = "5688,5690"
repair_type_id.split(',')
=> ["5688", "5690"]

最好在控制器中使用split 方法,同时将数据保存在特定属性上,而不是hidden_tag

编辑:

如果您想在plural 中转换字符串,请使用pluralizesingularize 相同

2.0.0-p481 :010 > 'cat'.pluralize 
 => "cats" 
2.0.0-p481 :011 > 'dogs'.singularize
 => "dog" 

【讨论】:

  • 感谢您的帮助。你能评论一下为什么使用 split 比修改 hidden_​​tag 更好吗?我从问题中的示例代码中询问,我们可以看到 repair_type 参数以单数或复数形式返回(repair_type_ids)。我宁愿将它作为复数返回,这样我的控制器就可以保持一致。是否可以让我的 f.hidden_​​field 使用复数参数名称提交?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多