2012-02-15 14 views
2

のために働いていない:私はコンテストを作成するときにのRails:before_createコールバックは、私は私のRailsの中で、次の3モデルやろうとしている私のモデル

require 'securerandom' 

class Contest < ActiveRecord::Base 
    attr_accessor :key 
    before_create :generate_key 

    private 

    def generate_key 
    self.key = SecureRandom.hex(3) 
    end 

end 

はしかし、私のテーブル内のすべてのフィールドが正しいように見えます私のDBには残っていないキーを除きます。

詳細:私は私の「コンテストのフォームを作成する」

SQL (0.5ms) INSERT INTO "contests" ("category", "created_at", "description", "key", "price", "status", "time", "title", "updated_at", "user_id") VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?) [["category", "camisas"], ["created_at", Wed, 15 Feb 2012 18:57:16 UTC +00:00], ["description", "test_description"], ["key", nil], ["price", 111], ["status", "In process"], ["time", "2sem"], ["title", "test_contest"], ["updated_at", Wed, 15 Feb 2012 18:57:16 UTC +00:00], ["user_id", 5]] 

注[「キー」、nilを経由コンテストを作成するときに、私のレールのサーバーログで

、私は以下を参照してください。 ]

これは正しいでしょうか?私はContest.rb:before_createコールバックによってキーが追加されると思いますか?

おそらく、私はSecureRandomを使用していませんか?

答えて

3

なぜあなたはattr_accessorを使用していますか?このメソッドは、実際にはキーのセッターとゲッターメソッドの両方を定義し、仮想属性を追跡します。

おそらくattr_accessibleを使用することを意図していましたが、属性を直接設定しているため、それでも不要です。

実際にこのように設定しているのであれば、実際にはあなたのモデルにはattr_accessor :keyまたはattr_accessible :keyのいずれも必要ありません。 attr_accessorを削除すれば正常に動作します。

+0

うん、私は1つを逃しました。私は削除:attr_accessorとまだ動作しません:( – Goles

+0

私はサーバーを再起動し、それは働いた。私はすでに数分前にあなたのソリューションを試したので、奇妙な。 – Goles

0

私はあなたが例えばattr_accessible <list accessible params>を書くべきだと思う:

attr_accessible :key, :category

関連する問題