gpt4 book ai didi

ruby-on-rails-3 - has_many 返回一个数组而不是 ActiveRecord 类

转载 作者:行者123 更新时间:2023-12-03 00:57:47 25 4
gpt4 key购买 nike

我正在关注OmniAuth railscasts并尝试使用 authlogic + facebook 而不是 devise + twitter 来实现相同的功能,如 Railscast 中所示。

也许我对has_many的理解仍然不好,但在railscasts中,ryan有following code在 AuthenticationsController 中

  def create
auth = request.env["rack.auth"]
current_user.authentications.find_or_create_by_provider_and_uid(auth['provider'], auth['uid'])
flash[:notice] = "Authentication successful."
redirect_to authentications_url
end

在我的实现中,current_user.authentications 返回一个数组[],如何在数组上调用find_or_create_by_provider_and_uid

我的实现是错误的吗? has_many 不是应该返回一个数组吗?

我得到的错误是我正在对 nil 对象调用 find_or_create_by_provider_and_uid

current_user.authentications 为零,因为用户还没有任何身份验证。

最佳答案

该数组实际上是一个 AssociationProxy 实例,它将所有方法调用委托(delegate)给内部对象,在 has_many 关联的情况下,该内部对象是一个数组(另请参阅 this question )。这意味着您应该能够调用诸如 find_or_create_by_provider_and_uid 之类的魔术方法以及作用域等。

我发现这个问题是因为我偶然发现了一个类似的问题:由于某种原因我无法调用ActiveRecord::Relation#klass来找出模型类:

post.comments.klass # => NoMethodError

但是通过首先调用relation,你可以得到一个普通的ActiveRecord::Relation实例:

post.comments.relation.klass # => Comment

关于ruby-on-rails-3 - has_many 返回一个数组而不是 ActiveRecord 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6218983/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com