小编典典

Rails .where()查询不起作用

sql

非常感谢你的帮助。我有一个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)
    

    1} permitted: true>

  2. ads_params

    @ads_params.require(:ads).permit(:id)
    

    1} permitted: true>

不允许这样输入特定的列:

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

我有postgresql,我没有考虑过使用SQL,但是我不确定。

查询参数

我正在使用Rails控制台执行此查询,以进行测试。

@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>

阅读 149

收藏
2021-04-14

共1个答案

小编典典

试试这个,

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)

希望对您有所帮助!

2021-04-14