有没有更好的方法来写这个:
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关联的用户 流派...
有什么建议可以让它发挥作用吗?
答案 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,这也应该有用。