我遇到了" 未定义的方法'加入'"当我尝试显示当前用户请求的所有俱乐部名称时出错。
在我的控制器中:
@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]
从各种来源修改我的代码但似乎没有工作......我一直在尝试的来源是:railsforum和dsone但它们似乎不适合我的工作代码。
答案 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])
我不确定为什么:Request
在joins
中被大写,我相信按惯例也应该是:request
。
第二个问题是使用"requests.userid = session[:userid]"
。请注意,此处不会插入session[:userid]
。正如所建议的那样,您应该使用上面代码片段中更新的参数化查询。
你已经有了@ JKen13579的另一个答案,这在句法上看起来要好得多!