Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在对象数组上迭代时获取属性值(获取零)_Ruby On Rails_Ruby - Fatal编程技术网

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