我有3個表和3種型號:ActiveRecord的破壞方法 - 錯誤的參數數目(0 1)
Car.rb
has_many :cars_domains, :dependent => :delete_all
has_many :domains, :through => :cars_domains
Domain.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
一輛車可以在一些域。 當我創建一輛車並綁定到一個域時,一切都很好。
但是當我嘗試從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'
有什麼不對?
UPD:。
CarsDomain.destroy_all(:car_id => 2, :domain_id => 1)
CarsDomain負荷(0.9ms)SELECT 「cars_domains」 * FROM 「cars_domains」 WHERE 「cars_domains」 「car_id」= 2且 「cars_do 電源」, 「域ID」= 1 (0.2ms)SAVEPOINT active_record_1 無法記錄「sql.active_record」事件。 NoMethodError:未定義的方法`name'爲零:NilClass (0.2ms)ROLLBACK TO SAVEPOINT active_record_1 ActiveRecord :: StatementInvalid:PGError:ERROR:零長度定界標識符在或接近「」「」「 LINE 1:DELETE FROM」cars_domains 「WHERE 」cars_domains「= $ 1 ^ 「。」:DELETE FROM 「cars_domains」 WHERE 「cars_domains」 「」= $ 1
UPD 2
我覺得在ID這個問題---- CREATE_TABLE: cars_domains,:id => false。因爲Destroy方法需要它。
我用它。發佈更新 – user1466717
CarsDomain.destroy_all(:car_id => 2,:domain_id => 1) – Nucc