试图愚弄我的模特,以显示重要的东西似乎缺少让我知道。
我尝试在我的视图中通过@session.owner
访问会话的所有者。所有者与参与者相关联,并且所有与会者都通过has_many
与会话相关联。
似乎self.attendees
没有返回任何记录。我确定我错过了一些明显的东西。如果您能提供帮助,请提前致谢!
干杯, 泰勒
会话模型
class Session < ApplicationRecord
has_many :attendees
def owner
self.attendees.each do |attendee|
if attendee.role == "Owner"
"#{attendee.user_id}"
end
end
end
end
参加者模型
class Attendee < ApplicationRecord
belongs_to :session
end
答案 0 :(得分:1)
在您的情况下,each
会在找到owner
后继续工作,并会返回nil
。
class Session < ApplicationRecord
has_many :attendees
def owner
user_id = nil
self.attendees.each do |attendee|
if attendee.role == "Owner"
user_id = "#{attendee.user_id}"
break
end
end
user_id
end
end
我已重写您的代码,使用sql
方法查找owner
。
class Session < ApplicationRecord
has_many :attendees
def owner
self.attendees.find_by(role: "Owner").try(:user_id)
end
end
答案 1 :(得分:1)
有一些事情很突出。首先,实现owner
方法的方式不是非常有效,必须查询每个记录并检查角色属性。可以使用Active Record Association方法定义关联。例如。您可以在声明关联时定义范围。
为了调查您的问题,即session.attendees
没有返回任何记录,我建议如下:
Attendee
应该有session_id
列。has_many :attendees
关联是否按预期工作。这很可能会揭示您代码的任何问题。接下来,使用活动记录关联声明您的“会话拥有者”关联。想想你想要什么:session.owner
应该返回与会者记录还是用户记录(在我们的示例中,您指出与会者属于用户?)假设session.owner
返回与会者记录,您的关联可能看起来像这样:has_one :owner, -> { where role: 'Owner' }, class_name: 'Attendee'
。 (请注意,这是一个未经测试的例子。)
有关has_one关联的详细信息,请参阅http://apidock.com/rails/ActiveRecord/Associations/ClassMethods/has_one