Ruby on Rails加入两个表

时间:2014-11-21 08:22:36

标签: ruby-on-rails rails-activerecord

我有两张桌子,看起来像

listing1: PID:String Description:String 

listing2: Pid:String Category:String

我想加入这两个表并在视图中显示它们

我试图在我的控制器中使用该语句:

@tmp = Listing1.joins('LEFT OUTER JOIN listing2s ON listing1s.PID = listing2s.Pid')

@next = @tmp.where("listing2s.Category = 'toy'")

现在我有两个问题:

  1. 我无法在视图中访问Listing2属性。 @tmp.Description正在运行,但@tmp.Category失败并抛出未知方法错误

  2. 在控制器@next = @tmp.where("listing2s.Category = 'toy'")中不会生效,我必须将其设为@next = Listing1.joins('LEFT OUTER JOIN listing2s ON listing1s.PID = listing2s.Pid').where("listing2s.Category = 'toy'")

  3. 有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Yaofei,

首先,“@ tmp.Category失败”导致@tmp是一个数组,“@ tmp.fisrt.Category”就可以了。

其次,失败的原因与第一个相同,如果你不这样写,你可以使用rails的范围,它确实使代码干净整洁。见:

scope :toy, -> { listing2s.Category = 'toy' }
scope :join_listing2_with_pid, -> { joins('LEFT OUTER JOIN listing2s ON listing1s.PID = listing2s.Pid') }

最后,你可以使用这样的范围:

@tmp = Listing1.join_listing2_with_pid
@next = Listing1.join_listing2_with_pid.toy