Ruby on rails 多个查询在一个方向上工作,在另一个方向上失败
我有: 但朝另一个方向走是失败的:Ruby on rails 多个查询在一个方向上工作,在另一个方向上失败,ruby-on-rails,has-and-belongs-to-many,Ruby On Rails,Has And Belongs To Many,我有: 但朝另一个方向走是失败的: Staff.find( :all, :conditions => "service_id = #{service_id}" ) 与 服务负载(0.3ms)选择“服务”。*,t0.staff\u id作为“服务”上的“服务”内部连接“服务\u staff”t0的“父记录\u id”。id=t0.Service\u id其中(t0.staff\u id IN(12,13,14))服务负载(0.0ms)SQLite3::SQLException:无此类列:员
Staff.find( :all, :conditions => "service_id = #{service_id}" )
与
服务负载(0.3ms)选择“服务”。*,t0.staff\u id作为“服务”上的“服务”内部连接“服务\u staff”t0的“父记录\u id”。id=t0.Service\u id其中(t0.staff\u id IN(12,13,14))服务负载(0.0ms)SQLite3::SQLException:无此类列:员工id:从“服务”中选择*,其中(staff\u id=13)
ActiveRecord::StatementInvalid(SQLite3::SQLException:没有这样的列:员工id:从“服务”中选择*,其中(员工id=13)):
你知道为什么吗?我通常使用的方法很多,但概念是一样的。您需要在搜索中包含关联,以便
Service.find( :all, :conditions => "staff_id = #{staff_id}" )
这将进行外部联接,因此将包括所有服务,并将加载员工数据
Service.find( :all, :include => :staffs, :conditions => "staffs.id = #{staff_id}" )
这将进行内部连接,并且只包含服务数据集(如果您调用service.staff,它将必须转到数据库
对于未经请求的建议,我建议稍微修改一下您的查询
Service.find( :all, :joins => :staffs, :conditions => "staffs.id = #{staff_id}" )
数组将逃避您的staff\u id
变量,以帮助防止恶意代码攻击。arg,我的错…它应该是staff.staff\u id
而不是服务。staff\u id
太棒了,明白了!再次感谢。在我的例子中,它实际上是“staff.id=?”。
Service.find( :all, :include => :staffs, :conditions => "staffs.id = #{staff_id}" )
Service.find( :all, :joins => :staffs, :conditions => "staffs.id = #{staff_id}" )
Service.all(:include => :staffs, :conditions => ["staffs.id = ?", staff_id])