0

Ryan Bates#235 DeviseとOmniAuth(改訂版)http://railscasts.com/episodes/235-devise-and-omniauth-revisedをフォローし、それを機能させることができました。

次に、ユーザーにプロファイルを追加します。

だから、これを試してみました...

def self.from_omniauth(auth)
    where(auth.slice(:provider, :uid)).first_or_create do |user|
      user.provider = auth.provider
      user.uid = auth.uid
      user.username = auth.info.nickname
      user.profile = user.build_profile
      user.profile.name = auth.info.name
      user.profile.save
    end
  end

一見、すべてが大丈夫に見えました。しかし、「name」属性が更新されていないことに気づきました。

1.9.3p125 :019 > Profile.last
  Profile Load (0.4ms)  SELECT "profiles".* FROM "profiles" ORDER BY "profiles"."id" DESC LIMIT 1
 => #<Profile id: 8, user_id: 3, name: nil, created_at: "2012-08-18 06:00:59", updated_at: "2012-08-18 06:00:59">

だから私は値を設定しようとしました、これは何が起こるかです:

 1.9.3p125 :020 > p=Profile.last
  Profile Load (0.4ms)  SELECT "profiles".* FROM "profiles" ORDER BY "profiles"."id" DESC LIMIT 1
 => #<Profile id: 8, user_id: 3, name: nil, created_at: "2012-08-18 06:00:59", updated_at: "2012-08-18 06:00:59">
1.9.3p125 :021 > p.name = "Adam"
 => "Adam" 
1.9.3p125 :022 > p.save
   (0.1ms)  BEGIN
   (0.1ms)  COMMIT
 => true 
1.9.3p125 :023 > p.name
 => "Adam" 
1.9.3p125 :024 > p
  => #<Profile id: 8, user_id: 3, name: nil, created_at: "2012-08-18 06:00:59", updated_at: "2012-08-18 06:00:59">

名前が更新されることを期待していました。私は何をすべきでしたか?

ありがとう

4

2 に答える 2

1

試す:

 accepts_nested_attributes_for :profile

ユーザーモデルで

于 2012-08-18T10:23:33.620 に答える
0

何が問題だったのかがわかったと思います。「名前」は予約済みの属性です。これを「owner_name」に変更したところ、p.owner_name="Adam" が機能するようになりました。「名前」を属性として使用してはならないことを知りませんでした。

皆さん、ありがとうございました!

于 2012-08-18T16:21:43.900 に答える