2016-07-12 3 views
-1

この質問を教えてください。モデルが動作しない

class CreateSmsSends < ActiveRecord::Migration 

def up 
create_table :sms_sends do |t| 

    t.integer :issue_number 

    t.string :sms_number 

    t.text :sms_text 

    t.boolean :send 

    t.boolean :deliver 

    t.timestamps 

end 

end 

def down 
    drop_table :sms_sends 
end 
end 

モデル:

class SmsSend < ActiveRecord::Base 
    attr_accessible :issue_number, :sms_number, :sms_text, :send, :deliver 
end 

私はコンソールでやろうとしている:モデルと移行作成

> s = SmsSend.new 
=> #<SmsSend id: nil, issue_number: nil, sms_number: nil, sms_text: nil, send: nil, deliver: nil, created_at: nil, updated_at: nil> 
> s.issue_number = 1 

をそれは、これを与える:

ArgumentError: wrong number of arguments (2 for 0) 
from /home/redmine_dev/.rvm/gems/[email protected]/gems/activerecord- 4.2.5/lib/active_record/attribute_methods.rb:48:in `__temp__3756e646' 
from /home/redmine_dev/.rvm/gems/[email protected]/gems/activerecord- 4.2.5/lib/active_record/attribute_methods.rb:379:in `clone_attribute_value' 

試してみると:

s = SmsSend.new(issue_number: 12345, sms_number: '9865654697', sms_text: 'text', send: 0, deliver: 0) 

それは、これを与える:

NoMethodError: undefined method `[]' for nil:NilClass 
from /home/redmine_dev/.rvm/gems/[email protected]/gems/activerecord-4.2.5/lib/active_record/attribute_methods/before_type_cast.rb:47:in `read_attribute_before_type_cast' 
from /home/redmine_dev/.rvm/gems/[email protected]/gems/activerecord-4.2.5/lib/active_record/attribute_methods/dirty.rb:160:in `block in original_raw_attribute' 

それを修正する方法を教えてください?

答えて

1

モデルにsend列を定義すると、ひどく壊れてしまいます。

sendメソッドは、Rubyオブジェクトにメッセージを送信するために使用されます。これはRubyの基本的な部分であり、ActiveRecordが明らかに依存する部分です。列名がそのメソッドを壊滅させ、モデルのインスタンスで列名を使用できなくします。

send列の名前を、組み込みのメソッド名と衝突しない名前に変更します。

関連する問題