1

私はレールに慣れていないので、多くの人と同じように、ActiveRecord と関連付けがどのように機能するかを理解するのに苦労しているようです。

ユーザー、プロジェクト、タスクの 3 つのモデルがあります。

Class User < ActiveRecord::Base
    has_many :projects
    has_many :tasks
end

Class Project < ActiveRecord::Base
    has_many :tasks
    belongs_to :user
end

Class Task < ActiveRecord::Base
    belongs_to :projects
    belongs_to :user
end

プロジェクトとタスクの両方にフィー​​ルドがありますuser_id。タスクにはフィールドがありますproject_id

ユーザーを通じてすべてのプロジェクトとタスクを検索できることを期待しています。ただし、プロジェクトとタスクがあるにもかかわらず、試行するたびに空の配列が得られます。

usr = User.find(1)
=> [User id: 1, name: "Some Guy"]
usr.projects
=> []
usr.tasks
=> []

プロジェクトを介してタスクを照会すると機能します。

proj = Project.find(1)
=> [#<Project id: 1, user_id: 1, description: "Some Project">]
proj.tasks
=> [#<Task id: 1, user_id: 1, project_id: 1, description: "Do Something">, 
   #<Task id: 2, user_id: 1, project_id: 1, description: "Do another thing">]

ユーザーに接続されている他のモデルがあり、正しく動作しているため、has_manyとの設定は正しいと思います。belongs_to私が見逃しているアイデアはありますか?

4

1 に答える 1

1

モデルの関連付けを変更することで解決しました。belongs_to :userTask モデルからを削除has_many :throughし、User モデルへの関係を追加しました。

Class User < ActiveRecord::Base
    has_many :projects
    has_many :tasks, :through => :projects
end

Class Project < ActiveRecord::Base
    has_many :tasks
    belongs_to :user
end

Class Task < ActiveRecord::Base
    belongs_to :projects
end

コンソールを再起動した後、最初に試みた方法でユーザーに属するタスクを取得できるようになりました。

usr = User.find(1)
usr.projects
=>[#<Project id: 1, user_id: 1, description: "Some Project">]
usr.tasks
=>[#<Task id: 1, project_id: 1, description: "Do Another Thing">]
于 2012-05-30T06:41:32.953 に答える