Ruby on Rails 3:如何在has_many查询中访问每条记录的属性
我不确定如何在标题中使用短语,但我正在尝试执行以下操作。我有2种型号有以下关系:Ruby on Rails 3:如何在has_many查询中访问每条记录的属性
class Campaign < ActiveRecord::Base
has_many :points
end
class Point < ActiveRecord::Base
belongs_to :campaign
end
现在,点模型具有“区域设置”属性,我希望能够把特定活动的每一个点的所有的“语言环境”为阵列,或收藏,或什么,而不必像做
locales = Array.new
campaign.points.each do |p|
locales << p.locale
end
我在想沿campaign.points.locales
线的东西。有没有一些好的Rails做这个查询的方法,或者我只需要遍历集合?
感谢您的任何帮助。
编辑:也因为关系实际上是一个“has_many通过”的关系,这种方法不起作用,因为我得到许多重复的区域设置,如果我尝试迭代以这种简单的方式。这听起来应该是某种类型的连接,但我不确定。
campaign.points.map {|p| p.locale}
应该这样做。
你可以做那些家伙说。将.uniq
放在最后,并以正确的解决方案结束,或者;
让我把你带入ActiveRecord乐趣迷失(可能失败,因为我无法测试,看看它是否在这里工作)。但是你可以像你想的那样运行campaign.points.locales
。
class Campaign < ActiveRecord::Base
has_many :points do
def locales
select('DISTINCT(locale)').map(&:locale)
end
end
end
'.uniq'为重复项目做了诀窍。非常感谢你! –
在此期间离开阅读文档...噢,我希望你会尝试AR解决方案,以便我可以看到它是否工作。我向你保证时间和空间的好处(因为它只从db中加载不同记录中的locale列)! – jimworm
+1对于一个有价值的答案;) – apneadiving
优秀!正是我在找什么。谢谢! –