我創建一個用戶使用omniauth寶石(這是工作),但user
創建後,我也想在profile
表中創建一個記錄(但只有當創建一個user
時)。Rails - 如何訪問父級模型中的類?
我決定在user
模型中使用回調來做到這一點。
然而,執行後的回調,它打我create_profile
方法,我碰到關於在user
模型的方法錯誤:
undefined method `facebook' for #<Hash:0x007fdf16858200>
即使我通過用戶:自我配置文件模型,我無法訪問它的方法。
User.rb
class User < ActiveRecord::Base
has_one :profile
has_many :pins
has_many :replies, through: :pins
after_create :build_profile
def self.from_omniauth(auth)
where(auth.slice(:provider, :provider_id)).first_or_initialize.tap do |user|
user.provider = auth.provider
user.provider_id = auth.uid
user.oauth_token = auth.credentials.token
user.oauth_expires_at = Time.at(auth.credentials.expires_at)
user.save
end
end
def build_profile
Profile.create_profile(user: self)
end
def facebook
@facebook ||= Koala::Facebook::API.new(oauth_token)
end
end
Profile.rb
class Profile < ActiveRecord::Base
belongs_to :user
def self.create_profile(user)
# undefined method `facebook' for #<Hash:0x007fdf16858200> for this line.
user.facebook.inspect
end
end
我是新來的Ruby和Rails ......所以,請多多包涵!
我欣賞你看着這個,告訴我我哪裏出錯了。
謝謝, 邁克爾。
PS - 看起來user.inspect
返回用戶在我的profile.rb
模型中的結果......但我試圖訪問該用戶類的方法。
我沒有顯示該行,它是一個讀取:'user.facebook.inspect'。它拋出錯誤,'臉譜'是一個未定義的方法。 –
啊,我看到了。抱歉。 – lurker