内部连接在轨道上的红宝石4

时间:2014-06-19 03:51:05

标签: mysql sql ruby-on-rails ruby join

我遇到了" 未定义的方法'加入'"当我尝试显示当前用户请求的所有俱乐部名称时出错。

在我的控制器中:

@clubs = Club.find(:conditions=> ["Request.userid = session[:userid]"],
                                     :joins=>[:Request])

在我看来:

@clubs.each do |c| 
  c.clubname
end 
我希望加载的等效查询是

SELECT clubname FROM clubs 
INNER JOIN request 
ON request.clubid = clubs.clubid 
WHERE request.userid = session[:userid]

从各种来源修改我的代码但似乎没有工作......我一直在尝试的来源是:railsforumdsone但它们似乎不适合我的工作代码。

2 个答案:

答案 0 :(得分:2)

获得所需内容的一种方法是:

@clubs.joins(:request).where(request: { userid: session[:userid] })

UPDATE:这似乎不适用于OP,很可能是因为@vee指出,该表是单数。如果是这种情况,那就需要不那么漂亮了:

@clubs.joins('request').where('request.user_id = ?', session[:userid])

答案 1 :(得分:1)

您使用条件表明Request是mysql中的数据库表。该表名通常是根据Rails,复数和小写。尝试:

@clubs = Club.find(:conditions=> ["requests.userid = ?", session[:userid]], :joins=>[:Request]) 

我不确定为什么:Requestjoins中被大写,我相信按惯例也应该是:request

第二个问题是使用"requests.userid = session[:userid]"。请注意,此处不会插入session[:userid]。正如所建议的那样,您应该使用上面代码片段中更新的参数化查询。

你已经有了@ JKen13579的另一个答案,这在句法上看起来要好得多!