3

現在、2 つのモデルをセットアップしています。

class Topic < ActiveRecord::Base
  belongs_to :category
end

class Category < ActiveRecord::Base
  has_many :topics
end

Railsコンソールに関連付けられたカテゴリでトピックを作成しようとしています:

t = Topic.new :name => "Test", :category => Category.find(1)

問題は、モデルに category_id があるため、次を使用する必要があることです。

c = Category.find(1)
t = Topic.new :name => "Test", :category_id => c.id

しかし、単に :category_id の代わりに :category を使用し、オブジェクト ID の代わりにカテゴリ オブジェクトを渡す機能を何度も見てきました。どこが間違っていますか?

私がする時:

c = Category.find(1)
t = Topic.new :name => "Test", :category => c

私は受け取ります:

ActiveRecord::UnknownAttributeError: unknown attribute: category
4

2 に答える 2

7

これを行うことができるはずです:

c = Category.find(1)
t = Topic.new :name => "Test", :category => c

モデルの関連定義により、これが可能になります。

興味深いことに、:category_id を使用してオブジェクトを渡すだけで、ID が取得されます。

t = Topic.new :name => "Test", :category_id => c

別の方法でそれを行うと、少しうまくいく可能性があります。

t = c.topics.build(:name => "Test") # Builds an object without saving

t = c.topics.create(:name => "Test") # Builds an object and saves it
于 2012-04-18T18:28:45.360 に答える
0

これが私のために働いたもののMREです

u = User.first

Trainer.create(name: "John", user: u)

Trainer モデルには 'user' 列がなく、user_id のみであることに注意してください。ただし、.createTrainer でレコードを取得する場合は、引き続き使用しますuser(Rails は、そのユーザーの ID を に配置することを認識していますuser_id) 。

于 2020-08-14T17:58:12.997 に答える