需要返回所有类型'Acoustic'的用户

时间:2010-11-13 12:25:38

标签: ruby-on-rails ruby mongodb mongoid

有没有更好的方法来写这个:

User.where(:genre_id => Genre.where(:name =>'Acoustic')。first.id)。first first.first_name

基本上,我正在尝试使用'Acoustic'类型返回所有​​用户。

如果有使用声学设置的用户,则上述功能将起作用。但如果我这样做:

User.where(:genre_id => Genre.where(:name =>'Pop')。first.id)。first first.first_name

我会收到错误,因为没有与pop关联的用户 流派...

有什么建议可以让它发挥作用吗?

3 个答案:

答案 0 :(得分:2)

一般来说,多对多的关系真的很糟糕(你支付的价格has_one / has_many非常棒)

我假设问题是Genre.where(:name => 'Pop').first返回nil?我会这样做

User.where(:genre_id => g).first.first_name if g = Genre.where(:name => 'Pop').first.try(:id)

或者如果大规模的一行表达不是你的事情

g = Genre.where(:name => 'Pop').first.try(:id)
if g
  User.where(:genre_id => g).first.first_name 
end

答案 1 :(得分:0)

通常的嵌套where不起作用吗?

User.where(:genre => { :name => 'Pop' })

答案 2 :(得分:0)

您可以尝试使用find而不是Genre:

User.where(:genre_id => Genre.find(:first, :conditions => { :name => 'Pop' }))

即使Genre.find返回nil,这也应该有用。