大家好我正在尝试使用text_field_tag搜索其他具有id hide的表中的列
在我看来,policy_vehicles有text_field_tag,想要按电机搜索
我的桌子
Vehicles
|id| |motor| |plate|
integer varchar(255) varchar(255)
1 MOTOR1 PLATE1
2 MOTOR2 PLATE2
3 MOTOR3 PLATE3
Policy_vehicles
|id| |vehicle_id|
integer integer
1 1
2 2
3 3
4 2
这是我的控制器
class PolicyManagement::PolicyController < ApplicationController
def generate_print_per_vehicle
@motor =Vehicle.find(:all,:conditions=>['motor =?' ,params[:search_motor] ] )
@policies= PolicyVehicle.find(:all,:conditions=>['vehicle_id= ?',params[:search_motor] ] )
end
end
这是我的模特
class PolicyVehicle < ActiveRecord::Base
belongs_to :vehicle
end
class Vehicle < ActiveRecord::Base
has_many :policy_vehicles
end
这是我的观点,我试图通过另一个表中的列找到
<% form_tag :controller=>"policy_management/policy",:action=>"generate_print_per_vehicle" do %>
Motor:
<%= text_field_tag "search_motor",params[:search_motor] %>
<%= submit_tag "Buscar", :name => nil %>
<% end %>
我的日志
Vehicle Load (0.1ms) SELECT * FROM `vehicles` WHERE (motor ='4D56UCCR5811')
PolicyVehicle Load (0.3ms) SELECT * FROM `policy_vehicles` WHERE (vehicle_id= '4D56UCCR5811')
它应该像这样搜索
SELECT * FROM `vehicles` WHERE (motor ='4D56UCCR5811' and id =1)
SELECT * FROM `policy_vehicles` WHERE (vehicle_id= '1')
我试过这个但是没有用
#controller
@vehicle = Vehicle.find(:all,:conditions=>['motor =?' ,params[:search_motor] ])
@policies = PolicyVehicle.find(:all, :conditions => ['vehicle_id = ? ', @vehicle.id])
#logs
Vehicle Load (17.2ms) SELECT * FROM `vehicles` WHERE (motor ='4D56UCCR5811')
PolicyVehicle Load (0.3ms) SELECT * FROM `policy_vehicles` WHERE (vehicle_id = 70353663367520 )
我做了一个select_tag,但我想写电机,而不是像这样选择
<%= select_tag "search_motor",options_for_select(@vehicle.collect {|t| [t.motor.to_s ,t.id]}, params[:search_motor].to_i ) %>
请有人可以帮帮我吗? 我将非常感谢帮助
答案 0 :(得分:1)
如果您正在“搜索”VARCHAR(255),您可能希望使用LIKE
代替=
。
@vehicle = Vehicle.find(:all,:conditions => ['motor LIKE ?', "%#{params[:search_motor]}%" ])
@policies= PolicyVehicle.find(:all, :conditions => ['vehicle_id= ?', @vehicle.id])
此外,如果您正在运行Rails 3或4,您可能希望停止使用find(:all, ...)
,而是使用where(..)
。
http://guides.rubyonrails.org/active_record_querying.html#hash-conditions
2.3.1平等条件
Client.where(locked:true)字段名称也可以是字符串:
Client.where('locked'=&gt; true)在belongs_to的情况下 关系,关联键可用于指定模型if Active Record对象用作值。这种方法适用 多态关系。
这是日志:
Vehicle Load (15.0ms) SELECT * FROM `vehicles` WHERE (motor = '%M16A1418981%')
PolicyVehicle Load (0.3ms) SELECT * FROM `policy_vehicles` WHERE (vehicle_id= 70353666460940)
答案 1 :(得分:1)
如果您使用指定:all
的find,您将获得一系列车辆,即使该数组的大小为1.因此,您不必询问@vehicle.id
像@vehicle[0].id
这样的东西:
PolicyVehicle.find(:all, :conditions => ['vehicle_id = ? ', @vehicle[0].id])
但是,如果您不需要@motor
数组用于任何其他目的,您应该能够使用:join
的一个查询直接转到您想要的记录:
PolicyVehicle.find(:all, :joins => :vehicle, :conditions => ['motor =?',params[:search_motor]])