Ruby on rails 在对象数组上迭代时获取属性值(获取零)
在我的Ruby on rails 在对象数组上迭代时获取属性值(获取零),ruby-on-rails,ruby,Ruby On Rails,Ruby,在我的Guest模型中,我使用此方法从关联模型返回ID列表: def self.people_list(consultant_id) # returns an array of ids of people who attended parties for a given consultant people = self.select(:person_id).joins('INNER JOIN parties ON guests.party_id = parties.id').where(
Guest
模型中,我使用此方法从关联模型返回ID列表:
def self.people_list(consultant_id)
# returns an array of ids of people who attended parties for a given consultant
people = self.select(:person_id).joins('INNER JOIN parties ON guests.party_id = parties.id').where('parties.consultant_id = ?', consultant_id).collect{ |g| g.person_id }
end
person\u id
是来宾模型中的一个字段。但我得到的是一系列的零。从rails控制台我可以看出查询是正确的,并且返回了正确数量的对象。我只是不想让他们进入阵列
谢谢你的帮助
顺便说一句,如果有帮助/重要的话,顾问有很多聚会,其中有很多客人。来宾有一个person_id,它将加入到People表中。我正在尝试从来宾表中查找所有参加某个顾问聚会的人员ID
从控制台(更改为rails关联语法后,如下所述)
在我看来,你应该把顾问作为主要对象来对待
def attendees
@attendees = []
parties.each do |p|
@attendees << p.guests.collect(&:person_id)
end
@attendees
end
def与会者
@与会者=[]
双方各有| p|
@与会者所以,我意识到我的attr\u访问器是:people\u id,这就是导致nils的原因。我需要将其保留给系统的另一方,但是我能够通过将g.person\u id替换为g[:person\u id]来获得正确的值
我不太明白为什么,但它是有效的…从删除“内部连接”开始,改用rails关联,例如Guest(:consultant_id)。如果控制台中的行为与应用程序不同,那么您使用的是不同id的hank,我试图减少sql调用的数量,因为此方法会经常被调用。不过,我同意它属于顾问公司。我想我可以通过重构来实现这一点。使用[]
符号访问属性会绕过对象上的方法来获取属性值。因此,当您使用g[:person\u id]
def attendees
@attendees = []
parties.each do |p|
@attendees << p.guests.collect(&:person_id)
end
@attendees
end