Ruby on rails 使用关系的条件问题
我试图使用关系中的三个表从另一个表中搜索一列 在我看来,Ruby on rails 使用关系的条件问题,ruby-on-rails,ruby,ruby-on-rails-2,Ruby On Rails,Ruby,Ruby On Rails 2,我试图使用关系中的三个表从另一个表中搜索一列 在我看来,policy\u vehicles我有一个text\u field\u标签,希望通过“raz\u soc”进行搜索 我的桌子是: Policy_vehicles |id| |policy_id| integer integer 100 1 200 2 Policies |id| |client_id| integer
policy\u vehicles
我有一个text\u field\u标签
,希望通过“raz\u soc”进行搜索
我的桌子是:
Policy_vehicles
|id| |policy_id|
integer integer
100 1
200 2
Policies
|id| |client_id|
integer integer
1 1
2 2
Clients
|id| |raz_soc|
integer varchar(255)
1 MARATEX SAC
2 ATT
这是我的控制器:
class PolicyManagement::PolicyController < ApplicationController
def generate_print_per_vehicle
params[:search_policy_id] = Policy.find(:all,:joins => :client ,:conditions => ['raz_soc LIKE ?',"%#{params[:search_raz_soc]}%" ])
@policies= PolicyVehicle.find(:all,:joins => :policy, :conditions => ['policy_id = ?',params[:search_policy_id] ])
end
end
应该是这样的搜索:
Policy Load (3.1ms) SELECT `policies`.* FROM `policies` INNER JOIN `clients` ON `clients`.id = `policies`.client_id WHERE (raz_soc = 'MARATEX SAC')
PolicyVehicle Load (0.3ms) SELECT `policy_vehicles`.* FROM `policy_vehicles` INNER JOIN `policies` ON `policies`.id = `policy_vehicles`.policy_id WHERE (policy_id = 1)
我尝试过这个,但不起作用:
#controller
@policy = Policy.find(:all,:joins => :client ,:conditions => ['raz_soc LIKE ?',params[:search_raz_soc] ])
@policies= PolicyVehicle.find(:all,:joins => :policy, :conditions => ['policy_id = ?',@policy ])
#logs
Policy Load (3.1ms) SELECT `policies`.* FROM `policies` INNER JOIN `clients` ON `clients`.id = `policies`.client_id WHERE (raz_soc = 'MARATEX SAC')
PolicyVehicle Load (0.3ms) SELECT `policy_vehicles`.* FROM `policy_vehicles` INNER JOIN `policies` ON `policies`.id = `policy_vehicles`.policy_id WHERE (policy_id = 70353610714140)
我正试着做这样的事情
select * from policy_vehicles where policy_id
IN ( SELECT id FROM policies WHERE
client_id IN (SELECT id FROM clients raz_soc = ?) )
有人能帮我吗 试试这个(我已经解释了查询返回的内容,所以请确保这是您想要从中得到的)
其他选项是在单个查询中执行,如下所示:
@policy_vehicles = PolicyVehicle.joins(:policy => :client).
where('clients.raz_soc LIKE ?',"%#{params[:search_raz_soc]}%")
#controller
@policy = Policy.find(:all,:joins => :client ,:conditions => ['raz_soc LIKE ?',params[:search_raz_soc] ])
@policies= PolicyVehicle.find(:all,:joins => :policy, :conditions => ['policy_id = ?',@policy ])
#logs
Policy Load (3.1ms) SELECT `policies`.* FROM `policies` INNER JOIN `clients` ON `clients`.id = `policies`.client_id WHERE (raz_soc = 'MARATEX SAC')
PolicyVehicle Load (0.3ms) SELECT `policy_vehicles`.* FROM `policy_vehicles` INNER JOIN `policies` ON `policies`.id = `policy_vehicles`.policy_id WHERE (policy_id = 70353610714140)
select * from policy_vehicles where policy_id
IN ( SELECT id FROM policies WHERE
client_id IN (SELECT id FROM clients raz_soc = ?) )
@policies = Policy.find(:all,:joins => :client ,
:conditions => ['raz_soc LIKE ?',"%#{params[:search_raz_soc]}%"] )
# returns an array of policy records based on the raz_soc condition on client
@policy_vehicles = PolicyVehicle.find(:all,:joins => :policy,
:conditions => ['policy_id IN (?)',@policies] )
# returns an array of policy_vehicles that are associated with any record in the @policies array
@policy_vehicles = PolicyVehicle.joins(:policy => :client).
where('clients.raz_soc LIKE ?',"%#{params[:search_raz_soc]}%")