0

Railsアプリで新しいモデルを作成しました。これは別のテーブルとの1対1の関係であるため、新しいモデルにid列を含める必要はありません。すべてが正常に機能していますが、何らかの理由で、このモデルでの私のShouldaテストはすべて失敗しています。例えば:

should_validate_presence_of :first_name

このエラーをスローしています:

ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'my_new_table.id'
in 'field list': SELECT `my_new_table`.id FROM `my_new_table` WHERE 
(`my_new_table`.`some_other_column` IS NULL)  LIMIT 1

ID列が必要ですか?もしそうなら、これを回避する方法はありますか?

4

4 に答える 4

3

Railsの目的で主キーのエイリアスを作成しましたか?

set_primary_key :my_fk_id
于 2009-12-08T15:59:18.557 に答える
1

Railsは、モデルに主キーとして整数ID列があることを想定しています。@MattMcKnightが提案するように外部キーに設定できますが、厳密に必要でない場合でも、id列を作成することをお勧めします。私の経験では、基本的にマイナス面はなく、このような頭痛の種を大幅に減らすことができます。

于 2009-12-08T16:19:04.897 に答える
0

新しいモデルを作成した後、rake db:migrateとrake db:test:prepareを実行しましたか?

于 2009-12-08T16:05:59.827 に答える
0

すべてのテーブルには、ActiveRecordが機能するのと同じ方法のid列が必要です。MattMcKnightが指摘しているように、主キーとして別の列を指定できます。:id => falsecreate_tableのオプションとして 提供することにより、ID列を持たないテーブルが作成されるように指定することもできます。

Mattの答えは、モデル定義の主キーの名前を変更することをカバーしています。移行でそれを行う方法は次のとおりです。

idオプションをfalseとして指定せずに主キーオプションを指定することは、列の定義をブロックに追加する必要がないことを意味することに注意してください。Railsがあなたのためにそれを作成します。そして、それを任意の結合テーブルで自動的に使用します。

例:

class CreateTableWithOUtID < ActiveRecord::Migration

  def self.up
    create_table :my_new_table, :primary_key => :another_table_id do |t|
     t.string :some_other_column 
    end
  end

  def self.down
    drop_table, :my_new_table
  end
end
于 2009-12-08T16:19:10.553 に答える