gpt4 book ai didi

ruby-on-rails - ActiveRecord 销毁方法 - 参数数量错误(0 代表 1)

转载 作者:行者123 更新时间:2023-12-01 07:20:21 26 4
gpt4 key购买 nike

我有 3 张 table 和 3 个模型:

碳水化合物

  has_many :cars_domains, :dependent => :delete_all
has_many :domains, :through => :cars_domains

域名.rb
has_many :cars_domains
has_many :cars, :through => :cars_domains

和cars_domain.rb
class CarsDomain < ActiveRecord::Base
belongs_to :car
belongs_to :domain

attr_accessible :car_id, :domain_id
end

class CreateCarsDomains < ActiveRecord::Migration
def change
create_table :cars_domains, :id => false do |t|
t.references :car, :domain
t.timestamps
end

add_index :cars_domains, [:car_id, :domain_id]
end
end

一辆车可以在某些领域。
当我创建汽车并绑定(bind)到域时,一切都很好。

但是当我尝试从 cars_domains 表中销毁时,出现错误:
CarsDomain.where(:car_id => 2, :domain_id => 1).destroy
ArgumentError: wrong number of arguments (0 for 1)

或者
 CarsDomain.where(:car_id => 2, :domain_id => 1).destroy_all

CarsDomain Load (0.5ms) SELECT "cars_domains".* FROM "cars_domains" WHERE "cars_domains"."car_id" = 2 AND "cars_do
mains"."domain_id" = 1

(0.2ms) SAVEPOINT active_record_1
Could not log "sql.active_record" event. NoMethodError: undefined method `name' for nil:NilClass
(0.3ms) ROLLBACK TO SAVEPOINT active_record_1
ActiveRecord::StatementInvalid: PGError: ERROR: zero-length delimited identifier at or near """"
LINE 1: DELETE FROM "cars_domains" WHERE "cars_domains"."" = $1
^
: DELETE FROM "cars_domains" WHERE "cars_domains"."" = $1
from /usr/local/lib/ruby/gems/1.9.1/gems/activerecord-3.1.3/lib/active_record/connection_adapters/postgresql_
adapter.rb:1062:in `prepare'

怎么了?

升级版:
CarsDomain.destroy_all(:car_id => 2, :domain_id => 1)

CarsDomain Load (0.9ms) SELECT "cars_domains".* FROM "cars_domains"WHERE "cars_domains"."car_id"= 2 AND "cars_do
电源"."domain_id"= 1
(0.2ms) SAVEPOINT active_record_1
无法记录“sql.active_record”事件。 NoMethodError:nil 的未定义方法“名称”:NilClass
(0.2ms) 回滚到保存点 active_record_1
ActiveRecord::StatementInvalid: PGError: 错误: """"处或附近的零长度分隔标识符
第 1 行:从 "cars_domains"中删除 "cars_domains".""= $1
^
: 从 "cars_domains"中删除 "cars_domains".""= $1

更新 2

我认为 ID 中的问题 ---- create_table :cars_domains, :id => false。因为 Destroy 方法需要它。

最佳答案

因为你有更多的条目,它属于 CarsDomain。 CarsDomain#destroy 需要一个 id,所以这就是您收到此消息的原因。使用destory_all有条件!
CarsDomain.destroy_all(:car_id => 2, :domain_id => 1)

关于ruby-on-rails - ActiveRecord 销毁方法 - 参数数量错误(0 代表 1),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12269675/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com