sql - Rails .where() 查询不工作

标签 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.require(:location).permit(:id) 
    <ActionController::Parameters {"id"=>1} permitted: true>
    
  2. 广告参数

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

相关文章:

ruby-on-rails - Rails 优雅地处理超时 session ?

ruby - 如何格式化 irb 命令提示符

ruby-on-rails - mongoid - 使用包含选择 1..N 引用关系中的子对象

ruby-on-rails - Node/NPM 依赖于 Ruby on Rails 引擎 gem Assets 管道

php - mysql按分数/点数对用户进行排名

python - 如何比较两个表并确定要返回的特定类型的行?

ruby-on-rails - 问题将 Rails 应用程序 (SQLite3) 部署到 Heroku (PostgreSQL)

mysql - SQL:排除代码

mysql - 使用 where 子句从 table1 中选择不在 table2 中的特定数据

ruby-on-rails - Rails - 用户在创建对象后按下 'Back',创建重复项