插入多个记录,每个插入一个唯一键

时间:2013-09-23 00:43:15

标签: ruby-on-rails ruby ruby-on-rails-4

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

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

2 个答案:

答案 0 :(得分: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} %>

答案 1 :(得分:1)

您在ActiveRecord查询中确实没有group_by。你group,但是如果你想对行组进行求和和计数,我认为这不是这里的情况。

相反,您可以对返回的结果使用group_by。为了澄清,它不会是生成的查询的一部分,但它会“按”某些标准“分组”你的结果,比如一个唯一的密钥,从而产生一个Hash,其中每个条目都在哈希将拥有一系列具有相同唯一密钥的办公室:

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

或者只是:

Office.all.group_by(&:my_unique_key_field_name)

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

祝福。