2013-09-23 57 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答案來生成唯一的密鑰,並考慮增容改造它,如果你發現它是有用的。

祝福。