2012-05-04 68 views
2

我想創建一個新的「AnswerStat」對象並將其保存在數據庫中。我得到︰Rails中的ActiveRecord :: MissingAttributeError(無法寫入未知屬性)

can't write unknown attribute `answer_stat_id' 

app/models/answer_stat.rb:14:in `new' 
app/models/answer_stat.rb:14:in `add_answer' 
app/controllers/users_controller.rb:31:in `block in index' 
app/controllers/users_controller.rb:30:in `each' 

answer_stat_id不存在,它是指我猜到表的主鍵id是id的answer_stats。當然,我沒有明確聲明這個屬性。爲什麼Rails正在尋找這個不存在的屬性?代碼:

class AnswerStat < ActiveRecord::Base 

    attr_accessible :contact, :statement, :answer_sum, :answer_count, :variation 

    belongs_to :contact, :class_name => "Friend" 
    has_one :statement 

    validates_uniqueness_of :contact, :scope => :statement 

    def self.add_answer(answer) 
    if stat = AnswerStat.find_by_contact_id_and_statement_id(answer.contact.id, answer.statement.id) 
    ...........do some stuff........... 
    else 
     @answer_stat = AnswerStat.new(:contact => answer.contact, :statement => answer.statement, :answer_count => 1, :answer_sum => answer.description, :variation => answer.description) 
     @answer_stat.save 
    end  
    end 

我從鐵軌控制檯調用它,或者從任何控制器,使用:

Answer.all.each do |a| 
     AnswerStat.add_answer(a) 
    end 

的answer_stats表(sqlite3的使用PRAGME table_info(answer_stats)):

0|id|INTEGER|1||1 
1|contact_id|integer|0||0 
2|answer_sum|integer|0||0 
3|answer_count|integer|0||0 
4|created_at|datetime|1||0 
5|updated_at|datetime|1||0 
6|statement_id|integer|0||0 
7|variation|integer|0||0 

在此先感謝

+0

什麼的'AnswerStat'看起來像表?另外,哪一行會導致錯誤? – Romain

回答

2

它可能來自statement屬性,它是指我認爲it's looking for an answer_stat_id foreign key在報表中。

您應該:

  • create the associated answer通過@answer_stat.build_statement(...)
  • 重新設計你的模型關聯,如果該語句是指預先存在的統計
+0

重新設計關聯的需求可能過多。假設兩者都是同時創建的,你只需要在代碼中正確完成。但事實上,它看起來像是從'語句'中丟失了一列。 – Romain

+0

對,我的錯。我想說的是,這個協會的性質可能不是很清楚。 –

+0

確實,可能是典型的初學者錯誤。 – Romain

相關問題