我有一个带有以下型号的rails应用程序。我希望能够直接从任务中引用配置文件。我认为我应该使用:通过某种方式,但我无法弄清楚。现在让我们说如果我想获得任务模型中的first_name,我必须使用task.executor.profile.first_name。而不是我想使用task.executor_profile.first_name。
我需要它来进行搜索,你可以参考与include的关联。如果有一个更简单的解决方案,而不必通过关联,请告诉我。
更新:
基于@ rlarcombe,我尝试了委托,但遗憾的是Ransack似乎并没有支持这种解决方案,但它与rails配合得很好。可以告诉我如何在这种情况下使用:through关联?
user.rb
has_many :assigned_tasks, class_name: "Task", foreign_key: "assigner_id", dependent: :destroy
has_many :executed_tasks, class_name: "Task", foreign_key: "executor_id", dependent: :destroy
has_one :profile, dependent: :destroy
profile.rb
belongs_to :user
task.rb
belongs_to :assigner, class_name: "User"
belongs_to :executor, class_name: "User"
答案 0 :(得分:1)
您所要做的就是在任务模型上定义几个has_one through associations。
这些关联定义可以为您提供所需内容:
应用/模型/ task.rb 强>
class Task < ActiveRecord::Base
belongs_to :assigner, class_name: "User"
belongs_to :executor, class_name: "User"
has_one :assigner_profile, through: :assigner, source: :profile
has_one :executor_profile, through: :executor, source: :profile
end
应用/模型/ user.rb 强>
class User < ActiveRecord::Base
has_many :assigned_tasks, class_name: "Task", foreign_key: "assigner_id", dependent: :destroy
has_many :executed_tasks, class_name: "Task", foreign_key: "executor_id", dependent: :destroy
has_one :profile, dependent: :destroy
end
应用/模型/ profile.rb 强>
class Profile < ActiveRecord::Base
belongs_to :user
end
有了这些,您现在应该可以致电:
task.assigner_profile.first_name
和
task.executor_profile.first_name
这些has_one通过关联应该与Ransack一起正常工作。
由于