use*_*717 3 activerecord ruby-on-rails ruby-on-rails-3
我有3个桌子和3个模型:
Car.rb
has_many :cars_domains, :dependent => :delete_all
has_many :domains, :through => :cars_domains
Run Code Online (Sandbox Code Playgroud)
Domain.rb
has_many :cars_domains
has_many :cars, :through => :cars_domains
Run Code Online (Sandbox Code Playgroud)
和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
Run Code Online (Sandbox Code Playgroud)
一辆汽车可以在某些领域.当我创建一辆汽车并绑定一个域名时,一切都很顺利.
但是当我尝试从cars_domains表中删除时,我有错误:
CarsDomain.where(:car_id => 2, :domain_id => 1).destroy
ArgumentError: wrong number of arguments (0 for 1)
Run Code Online (Sandbox Code Playgroud)
要么
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'
Run Code Online (Sandbox Code Playgroud)
怎么了?
UPD:
CarsDomain.destroy_all(:car_id => 2, :domain_id => 1)
Run Code Online (Sandbox Code Playgroud)
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:未定义的方法`名"的零:NilClass(为0.2ms)ROLLBACK TO SAVEPOINT active_record_1的ActiveRecord :: StatementInvalid:PGError:错误:零长度分隔标识符处或附近 "" "" 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方法需要它.
因为你有更多的条目,它属于CarsDomain.CarsDomain#destroy需要一个id,这就是你得到这条消息的原因.使用destory_all
条件!
CarsDomain.destroy_all(:car_id => 2, :domain_id => 1)
归档时间: |
|
查看次数: |
5274 次 |
最近记录: |