如何按 1 个以上的 Habtm 关联进行过滤
我对 Rails 还很陌生,所以如果这是一个愚蠢的问题,请不要杀了我 =P
我有以下模型:
class Profile < ActiveRecord::Base
has_and_belongs_to_many :sectors
has_and_belongs_to_many :languages
class Sector < ActiveRecord::Base
has_and_belongs_to_many :profiles
end
class Language < ActiveRecord::Base
has_and_belongs_to_many :profiles
end
我正在寻找一种优雅的方式(如果可能的话,无需编写 sql 连接或任何东西)来获取所有具有特定部门和特定语言的配置文件。
我已经用谷歌搜索过,但我能找到的只是如何为 1 个 habtm 做到这一点,但我需要它为 2 个。
我所拥有的就是以下内容:
def some_method(sector_id, language_id)
Sector.find(sector_id).profiles
end
但我不知道如何通过 language_id 添加过滤器而不弄乱连接条件或编写 sql,当然,所有这些都在一个查询中......有没有一种干净/优雅的方法来做到这一点?
谢谢!
I'm pretty new at Rails, so don't kill me if this a stupid question =P
I have the following models:
class Profile < ActiveRecord::Base
has_and_belongs_to_many :sectors
has_and_belongs_to_many :languages
class Sector < ActiveRecord::Base
has_and_belongs_to_many :profiles
end
class Language < ActiveRecord::Base
has_and_belongs_to_many :profiles
end
I'm looking for an elegant way (without writing sql joins or anything, if possible) to get all the profiles that have a particular sector and a particular language.
I've googled but all I could find is how to do it for 1 habtm, but I need it for 2.
All I have is the following:
def some_method(sector_id, language_id)
Sector.find(sector_id).profiles
end
But I don't know then how to add the filter by language_id without messing with joins conditions or writing sql, and of course, all in one query... Is there a clean/elegant way to do this?
Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
在上面的示例中,您已经生成了 2 个 sql 请求,
第一个 Sector.find(#id)(选择
获取记录的扇区表
with id == #id)
第二个 .profiles(在配置文件上选择
获取所有配置文件的表
以下部门 - 在此选择
你已经有内部连接
配置文件选择器打开
profile_selectors.profile_id =
由rails自动生成的profiles.id)
我希望这就是您正在寻找的:(但我使用:joins key)
此方法的结果是1个sql查询,您将获得按语言和部门过滤的配置文件。
最好的问候
Mateusz Juraszek
In your example above you've already generated 2 sql requests,
first Sector.find(#id) (select on
sectors table to get record
with id == #id)
second .profiles (select on profiles
table to get all profiles with
following sector - in this select
you already have inner join
profiles_selectors on
profiles_selectors.profile_id =
profiles.id generated automatically by rails)
I hope this is what you are looking for: (but I use :joins key)
Result of this method is 1 sql query and you get profiles filtered by language and sector.
Best regards
Mateusz Juraszek
试试这个:
Try this: