我有两张桌子,看起来像
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'")
现在我有两个问题:
我无法在视图中访问Listing2属性。 @tmp.Description
正在运行,但@tmp.Category
失败并抛出未知方法错误
在控制器@next = @tmp.where("listing2s.Category = 'toy'")
中不会生效,我必须将其设为@next = Listing1.joins('LEFT OUTER JOIN listing2s ON listing1s.PID = listing2s.Pid').where("listing2s.Category = 'toy'")
有什么想法吗?
答案 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