2012-06-22 73 views
0

我正在教導自己通過PragProg的Rails(顯然已經過時 - 我正在使用Rails 3.2.3)Rails for PHP Developers。我發現這本書沒有提到的這個seeds.rb文件。我試圖爲許多事情建立適當的種子條目,它給我can't mass-assign protected attributesRails attr_accessible僅適用於seed.rb?

經過一番搜索之後,看起來我唯一的選擇是打開attr_accessible以上的這些東西,或關閉阻止批量分配的默認功能。但是我想保持這個設定所暗示的安全。我不希望這些條目在種子播種後進行編輯。我只需要把它們放入數據庫中。

我在這裏沒有看到什麼?如何在不關閉保護的情況下播種這些數據?看起來種子應該是一種特殊情況,允許在不允許的情況下進行批量分配。

+0

我認爲我的問題的一部分是我不完全瞭解所述保護的效用。如果我可以說'x.name =「blah」'和'x.phone =「blahblah」'什麼阻止我說'x = X.new(name =>「blah」,phone =>「blahblah」 )'在安全方面做?我爲什麼要擔心通常不會/不應該改變保護的事情? –

回答

1

attr_accessible指定應始終打開批量分配的屬性列表,因此如果您只想打開這些屬性進行種子設置,則這可能不是您想要的。

你可以在種子文件中做的一件事是爲每個屬性使用setter方法。例如:

admin = User.new do |u| 
    u.name = "Foo" 
    u.admin = true 
end 

admin.save! 
+0

好吧,夠公平的。這是否意味着我將不得不像這樣寫出每個條目,或者是否有一種方法來迭代散列來構建這些條目? –

+0

你確實可以遍歷一個散列。像'hash.each {| k,v | u.send(「#{k} =」,v)}'應該可以工作。 – Bira

+0

似乎要做的伎倆。我想我還是有點困惑,因爲這是爲什麼。當我的種子不能以seed.rb文件似乎表明它們應該是的方式輸入時,我感覺自己正在竊取自己的代碼。 –