Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何在不删除活动记录的情况下执行?_Sql_Ruby On Rails_Arrays_Activerecord - Fatal编程技术网

Sql 如何在不删除活动记录的情况下执行?

Sql 如何在不删除活动记录的情况下执行?,sql,ruby-on-rails,arrays,activerecord,Sql,Ruby On Rails,Arrays,Activerecord,当我这样做时: apartments = Apartment.where(apart_params).delete_if{|x| x.floor == x.max_floor } 如果活动记录关系对象上的Ruby数组方法delete\u导致 NoMethodError (undefined method `delete_if' for #<Apartment::ActiveRecord_Relation:0x00000006d84ea0> Did you mean? delete

当我这样做时:

apartments = Apartment.where(apart_params).delete_if{|x| x.floor == x.max_floor }
如果活动记录关系对象上的Ruby数组方法
delete\u导致

NoMethodError (undefined method `delete_if' for #<Apartment::ActiveRecord_Relation:0x00000006d84ea0>
Did you mean?  delete
               delete_all):
NoMethodError(未定义的方法'delete\u if'用于#
你是说删除
删除(全部):
我不明白为什么会发生这种情况-这个对象似乎像一个普通数组一样响应

除了使用纯do块,还有其他更聪明的选择吗


也许你可以给出一个建议,让智能SQL(postgres)查询拒绝那些在最后一层的公寓

关系可以转换为数组,然后如果可以调用
,则可以将其删除:

Apartment.where(apart_params).to_a.delete_if {|x| x.floor == x.max_floor }
关于更智能的方法,这取决于
floor
max\u floor
方法是否为列。若有,则:

Apartment.where(apart_params).where.not("floor = max_floor")

如果可以调用,则可以将关系转换为数组,然后删除:

Apartment.where(apart_params).to_a.delete_if {|x| x.floor == x.max_floor }
关于更智能的方法,这取决于
floor
max\u floor
方法是否为列。若有,则:

Apartment.where(apart_params).where.not("floor = max_floor")

即使
单元.where(paramet_params)
看起来像数组对象,它也不是!正如错误所说,它返回一个ActiveRecordRelation,它不是数组。因此,如果要在ActiveRecordRelation上使用数组方法,必须将对象转换为
to_a

apartments = Apartment.where(apart_params).to_a.delete_if{|x| x.floor == x.max_floor }

即使
单元.where(paramet_params)
看起来像数组对象,它也不是!正如错误所说,它返回一个ActiveRecordRelation,它不是数组。因此,如果要在ActiveRecordRelation上使用数组方法,必须将对象转换为
to_a

apartments = Apartment.where(apart_params).to_a.delete_if{|x| x.floor == x.max_floor }

我建议将您的
公寓
分配切换到以下位置:


公寓=公寓.where(分开参数).map{x | x.floor==x.max_floor?x.delete:x}
我建议将您的
公寓
分配切换到以下位置:


公寓=公寓.where(分开参数).map{x | x.floor==x.max_floor?x.delete:x}

太棒了!谢谢请注意,这将从数据库中删除记录。太棒了!谢谢请注意,这将从数据库中删除记录。我希望我能在两个答案上打勾。。。非常感谢。我希望我能在两个答案上打勾。。。非常感谢。