我有一张桌子offices
。在应用程序的插入页面上,我有两个用于办公室名称和办公室类型的文本框,以及一个显示 的按钮Add Office
。我使用 jQuery 来复制两个文本框,因此用户可以一次插入多个办公室。用户可以输入办公室名称和类型,点击Add Office
,在同一页面上插入更多办公室,然后点击Submit
。
我想使用group_by
查询将同时创建的办公室组合在一起。我找到了一种让每个插入行都有一个唯一键的方法。我希望一组办公室的行共享相同的唯一键。这可能吗?
我有一张桌子offices
。在应用程序的插入页面上,我有两个用于办公室名称和办公室类型的文本框,以及一个显示 的按钮Add Office
。我使用 jQuery 来复制两个文本框,因此用户可以一次插入多个办公室。用户可以输入办公室名称和类型,点击Add Office
,在同一页面上插入更多办公室,然后点击Submit
。
我想使用group_by
查询将同时创建的办公室组合在一起。我找到了一种让每个插入行都有一个唯一键的方法。我希望一组办公室的行共享相同的唯一键。这可能吗?
您实际上没有group_by
ActiveRecord 查询。你确实有group
,但那是如果你想对行组进行求和和计数,我认为这里不是这种情况。
相反,您可以group_by
在返回的结果上使用。澄清一下,它不会是生成的查询的一部分,但它会“按”某些条件“分组”您的结果,例如唯一键,从而产生一个哈希,其中哈希中的每个条目都有一个办公室数组使用相同的唯一键:
Office.where(...some condition...).group_by(&:my_unique_key_field_name)
要不就:
Office.all.group_by(&:my_unique_key_field_name)
请注意 kobaltz 生成唯一密钥的答案,如果您发现它有用,请考虑升级它。
祝福。
在该操作下的控制器中,您可以创建一个随机数并在您的表上设置第三个字段,该字段接受唯一键。这个唯一的键值将是随机数。
@unique_key = rand[99999999999]
unique_key
但是,这种方法确实允许您创造与另一个办公室相同的价值的 1/99999999999 机会。相反,您可能希望创建一个随机散列来减少创建重复项的可能性。
@unique_key = SecureRandom.hex
为了降低这种可能性,您可以这样做
@unique_key = "#{SecureRandom.hex}#{SecureRandom.hex}"
这在技术上仍然是可能的,但极不可能。
这个例子是如果你使用 simple_form。你会想要修改你自己的细节
<%= f.input :unique_key, :as => :hidden, :input_html => {:value => @unique_key} %>