0

質問があります。誰かがこれを説明してくれることを願っています。関係の例:

class User < ActiveRecord::Base
  has_many :issues
  has_many :tasks, through: :issues
end

class Issue < ActiveRecord::Base
  belongs_to :user
  belongs_to :task
end

class Task < ActiveRecord::Base
  has_many :issues
  has_many :users, through: :issues
end

関連付けを通じていくつかのモデルを作成しようとします。

user = User.create
task = user.tasks.new 
user.tasks # [#<Task id: nil, created_at: nil, updated_at: nil>]
task.users # []

質問 1. これは一方向の関連付けを意図したものですか、それとも間違ったことをしていますか?

user.tasks.new.save     
 SQL (0.3ms)  INSERT INTO "tasks" ("created_at", "updated_at") ...

user.tasks.create    
SQL (0.4ms)  INSERT INTO "tasks" ("created_at", "updated_at") ..
SQL (0.4ms)  INSERT INTO "issues" ("created_at", "task_id", "updated_at", "user_id") ...

質問 2: create メソッドだけがレコードを結合テーブルに追加するのはなぜですか?

前もって感謝します。

4

1 に答える 1

0

ユーザーとタスクの間に多対多の関連付けを作成しています。一方向の関連付けを行うには、次のように記述する必要があります

 class User < ActiveRecord::Base
   has_many :tasks
 end

 class Task < ActiveRecord::Base
   belongs_to :user
 end

これにより、ユーザーとタスクの間に 1 対多の関連付けが作成されます。

Active Record の create メソッドはデータベースを更新しますが、新しいメソッドはログでわかるようにモデル オブジェクトを作成するだけです。

new の後に save を呼び出す必要があります

task = user.tasks.new 
user.save

これにより、実際にタスクとともにユーザーが保存されます

このリンクは、関連付けの詳細を説明します

http://guides.rubyonrails.org/association_basics.html

于 2012-09-13T17:57:27.667 に答える