1

私はRubyの初心者です。ここに私のコードがあります:

@user = User.find_by_username('myname', :select => 'users.email')
email = @user.email

変数「email」が null 値を返すのはなぜですか? しかし、次のコードを使用すると、正しい結果が返されます。

email = @user[:email]

ところで、:select を削除したとしても、問題はまだ残っています。

オブジェクトは問題ないようです。使用した結果は次のとおりです@user.to_yaml

--- !ruby/object:User
attributes:
  email: xxx@gmail.com
4

4 に答える 4

1

オブジェクトの一部だけを選択しているように見え、それは:select => 'users.email'特別なほぼモデルに変換されています。これだけやってみてください:

@user = User.find_by_username('myname')
email = @user.email

また、どのバージョンのRailsを使用していますか?Rails 3.2.8プロジェクトでステートメントを実行し、@user.email私のために働きました

于 2012-11-17T03:42:18.647 に答える
1

いくつかのことを試しました (emailメソッドのオーバーライド、 からattr_accessibleの削除、 からのメール列の削除schema.rb) が、常に機能し続けました。

質問へのコメントから答えを見つけましたが、それattr_accessorが問題でした。

要約すると、属性には絶対に使用attr_accessorしないでください。Model

于 2012-11-17T14:11:46.597 に答える
1

そのようにリクエストを書く必要があります:

@user = User.select(:email).find_by_username('myname')
email = @user.email

これは、ActiveRecord でクエリを作成する通常の方法です。

于 2012-11-17T08:45:09.963 に答える
0

うーん、あなたの例を見ると、それはあなたが選択を指定したからだと思います。

また、メソッドアクセサーではなく[]を使用すると、集計のカウントなど、モデルに定義されていない値を取得できるため、selectを使用するとアクセサーメソッドが取得されない場合があると思います。定義されますか?しかし、ええ、それは奇妙です!

于 2012-11-17T03:34:07.413 に答える