gpt4 book ai didi

ruby-on-rails-3 - 在关联上使用作用域

转载 作者:行者123 更新时间:2023-12-04 02:19:52 25 4
gpt4 key购买 nike

所以我有了一个疯狂的想法,我想将范围应用于包含的关联。这是我想出来的,它似乎工作得很好:

class Event < ActiveRecord::Base
has_many :races
has_many :bad_races, :conditions => Race.bad_medals_sql, :class_name => "Race"
end

class Race < ActiveRecord::Base
def self.bad_medals_sql
arel_table[:prizes].eq('medals').to_sql
# This returns a string
# "`races`.`prizes` = 'medals'"
end

def self.bad_medals
where(bad_medals_sql)
end
end

Event.includes(:bad_races)
Reloading...
Event Load (0.4ms) SELECT `events`.* FROM `events`
Race Load (0.5ms) SELECT `races`.* FROM `races` WHERE (`races`.event_id IN (1,2,3,4) AND (`races`.`prizes` = 'medals'))

问题是它真的很钝。为了在 Race 上定义范围(在其他地方使用)并在 Event 的关联上使用它,我必须在 Race 上有两种方法。对于每个范围。

我确信我可以将模式包装到插件或类似插件中,但如果可能的话,我更愿意使用原生 AR/ARel。这样做的任何想法?

最佳答案

这段代码看起来过于复杂。假设您的目标是获得包含只有“奖牌”作为奖品的比赛的所有赛事,这不是一个简单的 scope工作?

class Event < ActiveRecord::Base
has_many :races
scope :bad_races, includes(:races).where("races.prizes=?", "medals")
end

class Race < ActiveRecord::Base
belongs_to :event
end

然后你可以运行 Event.bad_races获得糟糕的比赛。

关于ruby-on-rails-3 - 在关联上使用作用域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4859099/

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