Rails .where()查询不起作用

时间:2017-03-13 09:46:33

标签: sql ruby-on-rails ruby postgresql ruby-on-rails-5

非常感谢你的帮助。 我有一个locationsads表。位置has_many :ads 我在位置模型上执行以下查询。

@locations = Location.joins(:ads).where(@location_params.require(:location).permit(:id)).includes(:ads)

然后我想对@locations执行其他查询,并根据:ads

对其进行过滤
@locations = @locations.joins(:ads).where(ads: @ads_params.require(:ads).permit(:id)).includes(:ads)

此查询有效。它返回一个空对象。

=> #<Location::ActiveRecord_Relation:0x1e29270>

这是参数:

  1. location_params

    @location_params.require(:location).permit(:id) 
    <ActionController::Parameters {"id"=>1} permitted: true>
    
  2. ads_params

    @ads_params.require(:ads).permit(:id)
    <ActionController::Parameters {"id"=>1} permitted: true>
    
  3. 不允许像这样提供特定的列输入:

    @locations = Location.joins(:ads).where(locations: {id: 1}, ads: {id: 1})
    

    我有postgresql,我没想过使用SQL,但我不确定。

    查询参数

    我正在使用rails console来执行此查询,以进行测试。

    @location_params 
    => <ActionController::Parameters {"location"=><ActionController::Parameters {"id"=>1} permitted: false>} permitted: false>
    
    
    @location_params.require(:location).permit(:id)
    => <ActionController::Parameters {"id"=>1} permitted: true>
    
    @ads_params
    => <ActionController::Parameters {"ads"=><ActionController::Parameters {"id"=>1} permitted: false>} permitted: false>
    
    @ads_params.require(:ads).permit(:id)
    => <ActionController::Parameters {"id"=>1} permitted: true>
    

1 个答案:

答案 0 :(得分:3)

试试这个,

ads_params = @ads_params.require(:ads).permit(:id).to_h
location_params = @location_params.require(:location).permit(:id).to_h
@locations = Location.joins(:ads).where(locations: location_params, ads: ads_params)

希望有所帮助!