2012-01-16 32 views
1

我有這樣的代碼......的Rails 3.1 - find_or_create_by不節能

recipient = User.find_or_create_by_email(params[:recipient_email], 
     { :password => 'password', 
     :password_confirmation => 'password', 
     :first_name => 'First', 
     :last_name => 'Last', 
     :active => false }) 

不工作。收件人不會保存在數據庫中,因爲它應該是。然而,這...

recipient = User.find_or_create_by_email(params[:recipient_email], 
     { :password => 'password', 
     :password_confirmation => 'password', 
     :first_name => 'First', 
     :last_name => 'Last'}) 

不工作的,因爲它創建收件人並在數據庫中保存它,但:活動標誌現在設置爲默認的事實。

用戶模型中我有...

attr_accessible :first_name, :last_name, :email, :password, :password_confirmation, :active 

validates :active, :presence => true 

任何想法,這是怎麼回事嗎?

+0

我以爲我不能當它不讓我upvote一些答案。顯然有一些我錯過了。感謝您指出了這一點。 – slabounty 2012-01-17 00:47:20

+0

啊......大複選框的東西?好的,我接受了一堆答案。感謝您提出問題@troutwine – slabounty 2012-01-17 02:36:47

+0

沒問題。不過,我手邊沒有任何問題。您可以通過irc.freenode.net上的#ror來傳遞它。 。 – troutwine 2012-01-17 03:34:14

回答

1

您的:active不是真或假(除非您在遷移文件中定義了默認值,否則爲零)。也許虛假被解釋爲不存在,我不知道。但這是我如何做到這一點:

t.boolean :active, :default => false放在您的文件中(或者如果您需要創建遷移,請執行change_column :table, :active, :boolean, :default => false),然後刪除您的驗證。

除非您提供具有不同值的參數,否則現在每個用戶都保存爲假。如果你的大多數用戶應該是真的(所以整個事情,反之亦然),然後改變它。這使得你的驗證不需要。

希望我明白了你的問題。否則,不理我。

+0

@pduesteler - 感謝在鐘聲這裏是我的移民,如果我理解你說的話,我想我已經在做了...... '類AddActiveToUser <的ActiveRecord ::遷移 DEF改變 add_column:用戶,:active,:boolean,:default => true end end' 我錯過了什麼嗎? – slabounty 2012-01-17 18:48:21

+0

@pduesteler - 剛刪除驗證,一切正常。默認值是true,我可以傳遞false。不完全確定**爲什麼**,但現在我很高興。謝謝!像我想的那樣, – slabounty 2012-01-17 19:00:56

+0

似乎認爲虛假被解釋爲不存在。別客氣。 – pduersteler 2012-01-17 21:15:24