【问题标题】:Inner join in ruby on rails 4ruby on rails 4 的内部连接
【发布时间】:2014-08-09 12:16:40
【问题描述】:

我在尝试显示当前用户请求的所有俱乐部名称时遇到“undefined method '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,但它们似乎在我的代码中不起作用。

【问题讨论】:

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


    【解决方案1】:

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

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

    更新: 似乎不适用于 OP,很可能是因为正如 @vee 指出的那样,该表是单数的。如果是这样,它就需要不那么漂亮了:

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

    【讨论】:

    • 我刚刚更新了答案,希望对您有所帮助。如果没有,您能否将完整的错误日志粘贴到您的问题中?
    【解决方案2】:

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

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

    我不确定为什么您的:Request 大写为joins,我也认为按照惯例应该是:request

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

    你已经在这里得到了@JKen13579 的另一个答案,它在语法上看起来好多了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-10
      • 1970-01-01
      • 2016-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-02-23
      • 1970-01-01
      相关资源
      最近更新 更多