1

我有一张桌子offices。在应用程序的插入页面上,我有两个用于办公室名称和办公室类型的文本框,以及一个显示 的按钮Add Office。我使用 jQuery 来复制两个文本框,因此用户可以一次插入多个办公室。用户可以输入办公室名称和类型,点击Add Office,在同一页面上插入更多办公室,然后点击Submit

我想使用group_by查询将同时创建的办公室组合在一起。我找到了一种让每个插入行都有一个唯一键的方法。我希望一组办公室的行共享相同的唯一键。这可能吗?

4

2 回答 2

1

您实际上没有group_byActiveRecord 查询。你确实group,但那是如果你想对行组进行求和和计数,我认为这里不是这种情况。

相反,您可以group_by在返回的结果上使用。澄清一下,它不会是生成的查询的一部分,但它会“按”某些条件“分组”您的结果,例如唯一键,从而产生一个哈希,其中哈希中的每个条目都有一个办公室数组使用相同的唯一键:

Office.where(...some condition...).group_by(&:my_unique_key_field_name)

要不就:

Office.all.group_by(&:my_unique_key_field_name)

请注意 kobaltz 生成唯一密钥的答案,如果您发现它有用,请考虑升级它。

祝福。

于 2013-09-23T08:15:50.577 回答
1

在该操作下的控制器中,您可以创建一个随机数并在您的表上设置第三个字段,该字段接受唯一键。这个唯一的键值将是随机数。

@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} %>

于 2013-09-23T00:56:35.510 回答