非常感谢您的帮助。
我有一个 locations
和 ads
表。位置 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>
这是参数:
位置参数
@location_params.require(:location).permit(:id) <ActionController::Parameters {"id"=>1} permitted: true>
广告参数
@ads_params.require(:ads).permit(:id) <ActionController::Parameters {"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>
最佳答案
试试这个,
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)
希望对您有所帮助!
关于sql - Rails .where() 查询不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42760581/