1

初心者レールの質問が近づいています。

私はこのようなクラスを持っています:

class Thing < ActiveRecord::Base
    attr_accessible :name
    attr_accessor :name
    validates_uniqueness_of :name, :case_sensitive => false
end

移行を実行しましたが、テーブルは問題ないようです。次に、を起動してrails console、次のことを試してください。

t = Thing.new(:name => "test")
=> #<Thing id: nil, name: nil, description: nil, created_at: nil, updated_at: nil> 

すでにここに名前はnilと書かれていますが、なぜですか?続けて、私はこれを試します:

t.name
 => "test"

とにかく名前が設定されているようですか?保存しようとすると:

t.save!
Thing Exists (8.0ms)  SELECT 1 AS one FROM "things" WHERE LOWER("things"."name") = LOWER('test') LIMIT 1
SQL (16.0ms)  INSERT INTO "things" ("created_at", "description", "name", "updated_at") VALUES ('2012-10-28 16:10:12.701000', NULL, NULL, '2012-10-28 16:10:12.701000')
=> true 

指定した名前が保存されないのはなぜですか?私が欲しいのは、newを呼び出すときに属性をハッシュとして指定し、インスタンスを保存できるようにすることです。

4

1 に答える 1

5

を削除する必要がありattr_accessor :nameます。これにより、のゲッターとセッターnameが作成されますが、これらはActiveRecordによって既に作成されています。

于 2012-10-28T16:19:10.960 に答える