2

新しい「AnswerStat」オブジェクトを作成してデータベースに保存したいと考えています。私は得ています:

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 であるテーブル 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 テーブル (PRAGME table_info(answer_stats) を使用する sqlite3):

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

前もって感謝します

4

1 に答える 1

2

statement関連付けられたモデルを参照する属性から来る可能性があります。ステートメントテーブルでanswer_stat_id 外部キーを探していると思います。

次のいずれかを行う必要があります。

  • を介して関連する回答を作成します@answer_stat.build_statement(...)
  • ステートメントが統計よりも前に存在することを意図している場合は、モデルの関連付けを再設計します
于 2012-05-04T14:14:40.003 に答える