刪除記錄我有一個表,說的人,如果我做無法通過Rails的
person = Person.find(:first)
person.delete
我得到
NoMethodError: undefined method `to_sym' for nil:NilClass
from .rvm/gems/[email protected]/gems/activesupport-3.1.1/lib/active_support/whiny_nil.rb:48:in `method_missing'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/base.rb:1403:in `block in expand_hash_conditions_for_aggregates'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/base.rb:1402:in `each'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/base.rb:1402:in `expand_hash_conditions_for_aggregates'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/relation/query_methods.rb:261:in `build_where'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/relation/query_methods.rb:124:in `where'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/relation.rb:380:in `delete'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/base.rb:442:in `delete'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/persistence.rb:72:in `delete'
from (irb):60
from .rvm/gems/[email protected]/gems/railties-3.1.1/lib/rails/commands/console.rb:45:in `start'
from .rvm/gems/[email protected]/gems/railties-3.1.1/lib/rails/commands/console.rb:8:in `start'
from .rvm/gems/[email protected]/gems/railties-3.1.1/lib/rails/commands.rb:40:in `<top (required)>'
from script/rails:6:in `require'
from script/rails:6:in `<main>'
如果我做
person.destroy
我得到
SQL (0.2ms) BEGIN
Could not log "sql.active_record" event. NoMethodError: undefined method `name' for nil:NilClass
Mysql::Error: Unknown column 'persons.' in 'where clause': DELETE FROM `persons` WHERE `persons`.`` = ?
(0.1ms) ROLLBACK
ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'persons.' in 'where clause': DELETE FROM `persons` WHERE `persons`.`` = ?
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/connection_adapters/mysql_adapter.rb:883:in `prepare'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/connection_adapters/mysql_adapter.rb:883:in `exec_stmt'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/connection_adapters/mysql_adapter.rb:490:in `block in exec_delete'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/connection_adapters/abstract_adapter.rb:244:in `block in log'
from .rvm/gems/[email protected]/gems/activesupport-3.1.1/lib/active_support/notifications/instrumenter.rb:21:in `instrument'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/connection_adapters/abstract_adapter.rb:239:in `log'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/connection_adapters/mysql_adapter.rb:489:in `exec_delete'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/connection_adapters/abstract/database_statements.rb:101:in `delete'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/connection_adapters/abstract/query_cache.rb:14:in `delete'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/relation.rb:351:in `delete_all'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/persistence.rb:94:in `destroy'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/locking/optimistic.rb:119:in `destroy'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/callbacks.rb:254:in `block in destroy'
from .rvm/gems/[email protected]/gems/activesupport-3.1.1/lib/active_support/callbacks.rb:390:in `_run_destroy_callbacks'
from .rvm/gems/[email protected]/gems/activesupport-3.1.1/lib/active_support/callbacks.rb:81:in `run_callbacks'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/callbacks.rb:254:in `destroy'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/transactions.rb:236:in `block in destroy'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/transactions.rb:295:in `block in with_transaction_returning_status'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/connection_adapters/abstract/database_statements.rb:192:in `transaction'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/transactions.rb:208:in `transaction'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/transactions.rb:293:in `with_transaction_returning_status'
from .rvm/gems/[email protected]/gems/activerecord-3.1.1/lib/active_record/transactions.rb:236:in `destroy'
from (irb):61
但是,如果我編寫SQL刪除語句,我可以通過MySQL控制檯刪除記錄。任何想法可能發生什麼?
其他信息: Person表具有id列,但在databae主鍵是使用id和其他一些列的組合鍵。人員模型是由其他人編寫的,並且有許多方法編寫,但沒有一個名爲delete或destroy是明確寫的。
在'persons'表中是否有'id'列?我們也可以看到'人'模型嗎? –
@AnonyAlberto,我在問題中更新了一些。還有哪些信息可以幫助? – highBandWidth