2013-09-23 101 views
1

我有一个表offices。在应用的插入页面上,我有两个用于办公室名称和办公室类型的文本框,以及一个说Add Office的按钮。我使用jQuery来复制两个文本框,因此用户可以一次插入多个办公室。用户可以输入办公室名称和类型,点击Add Office,在同一页面上插入更多的办公室,然后点击Submit。我想用group_by查询将同时创建的办公室分组在一起。我发现每个插入行都有一个唯一键。我想让一组办公室的行共享相同的唯一密钥。这可能吗?插入多个记录与每个插入的唯一键

+1

我真的不明白谁会一直在降低提问的质量!这个问题没有错!我要升级它。 – mjnissim

回答

1

在控制器的操作下,您可以创建一个随机数并在您的表上有第三个字段接受唯一密钥。这个唯一的键值就是随机数。

@unique_key = rand[99999999999]

然而,这种方法确实允许一个小99999999999分之1的机会,你将会得到同样的unique_key值作为另一个办公室。相反,您可能希望创建一个随机散列,以减少创建副本的可能性。

@unique_key = SecureRandom.hex

为了使这更不可能,你可以做

@unique_key = "#{SecureRandom.hex}#{SecureRandom.hex}"

这将在技术上仍是可能的,但可能性微乎其微。

这个例子是如果你使用simple_form。你想修改你自己的具体情况

<%= f.input :unique_key, :as => :hidden, :input_html => {:value => @unique_key} %>

+0

哦,不要忘记在你的迁移中加入'add_index',以确保'unique_key'是索引,它将更好地优化你的数据库。 – kobaltz

1

你真的没有group_by中的ActiveRecord查询。你group,但这就是如果你想对行组进行总结和计数,我认为这不是这种情况。

相反,您可以使用group_by对返回的结果。为了澄清,它不会成为查询生成的的一部分,但它会将结果“按”某些标准“分组”,如唯一键,导致产生一个Hash,其中Hash中的每个条目都会有一个数组

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

或者只是:使用相同的唯一密钥办事处

Office.all.group_by(&:my_unique_key_field_name)

请注意kobaltz答案来生成唯一的密钥,并考虑增容改造它,如果你发现它是有用的。

祝福。