1

Clearance gem を使用して、Web サイトに認証を追加します。標準の User モデルは次のようになります。

class User < ActiveRecord::Base
  include Clearance::User
end

ここで、ユーザー モデルにさらにプロパティを追加したいと思います。この移行を作成しました:

class AddCustomernameToUsers < ActiveRecord::Migration
  def change
    add_column :users, :customername, :string
  end
end

rake db:migrate の後、データベースには :customername の列が 1 つ増えました

次のステップとして、ユーザー モデル ファイルを次のように編集しました。

class User < ActiveRecord::Base
  include Clearance::User
  attr_accessor :customername
end

次のステップとして、新しいユーザーにサインアップし、sqlite データベース ブラウザーを使用して、このユーザーの顧客名フィールドにテスト文字列「charly」を追加しました。

私のコントローラーでは、ユーザー オブジェクトを作成し、それを印刷して、すべてのデータが存在するかどうかを確認したいと考えています。

thisUser = User.find(current_user.id)
puts thisUser.inspect

コンソール出力は次のとおりです。

#<User id: 1, email: "test@test.de", encrypted_password: "0494a9b3b692acaea96ab57bed500adf26dbafa5", salt: "75c889d099438476204ce46b9cb406fb1f73423c", confirmation_token: nil, remember_token: "907b9bd600246d0b8dcc06a782457665f614b368", created_at: "2012-03-21 20:59:44", updated_at: "2012-03-21 21:12:59", customername: nil>

したがって、customername は nil です。どういうわけか、このフィールドのデータがデータベースから正しく引き出されません。

私は何を間違っていますか?

すみません、Rails初心者です。非常に単純なことかもしれませんが、私は一日中懸命にグーグルで検索しましたが、うまくいかなかったので、スタック オーバーフローの知恵に目を向けます。みんなありがとう。

4

2 に答える 2

1

User モデルで attr_accessor を使用する代わりに、 attr_accessible :customername を使用すると機能します。attr_accessible がないと、データはデータベースに保存されないため、フィールドの値が nil になるのはそのためです。

于 2013-04-08T07:40:16.820 に答える
0

sqlite データベース ブラウザを使用して、正しいデータベースを編集していますか? その場合は、別のツールを使用して顧客名を追加し、それが役立つかどうかを確認するのではなく、顧客名を含めるようにユーザー作成コードを変更してみてください。

于 2012-03-22T00:25:54.760 に答える