gpt4 book ai didi

ruby-on-rails-3 - 两个范围的联合导致 NoMethodError(未定义的方法 `default_scoped?' ...)

转载 作者:行者123 更新时间:2023-12-04 07:17:20 25 4
gpt4 key购买 nike

我已经定义了以下两个范围并且都工作正常:

scope :regular_friends, lambda { |user| joins{friendships}.where{friendships.user_id.not_in(user)}}
scope :inverse_friends, lambda { |user| joins{inverse_friendships}.where{inverse_friendships.friend_id.not_in(user)}}

我在这里使用 squeel (https://github.com/ernie/squeel) 并建立一个自引用关联,它的灵感来自 (http://railscasts.com/episodes/163-self-referential-association) .

基于此,我想定义第三个作用域,它联合其他两个作用域的结果:

scope :friends, lambda { |user| User.regular_friends(user).union(User.inverse_friends(user)) }

不幸的是,它不起作用。我得到一个:

NoMethodError (undefined method `default_scoped?' for #<Arel::Nodes::Union:0x8249534>):

我正在使用 Rails 3.1.3。我以为 default_scope? 方法已在 Rails 3.* 中删除,但它提示说......

有人能帮忙吗?

最佳答案

Rails 中没有union 这样的方法(我不知道Arel)。只需像往常一样构建范围。

编辑:您始终可以在范围定义中使用原始 sql。我不知道您的应用程序的详细信息(尤其是表是如何互连的),所以我无法构建完整的查询。然而,查询将类似于此:

scope :friends, find_by_sql(%(
SELECT users.* FROM users INNER JOIN friendships f on f.user_id = users.#{id} WHERE ...
UNION
SELECT users.* FROM users INNER JOIN inverse_friendships i on i.friend_id = users.#{id} WHERE ...
)

关于ruby-on-rails-3 - 两个范围的联合导致 NoMethodError(未定义的方法 `default_scoped?' ...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8475567/

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