1

我正在尝试在应用程序控制器的 :helper_method 中将对象添加到 Ruby on Rails 的数组中。在这个例子中,other_roommates 以数组的形式返回,其中包含 2 个对象,类型为 house_tenant,这正是我所期望的。

  @other_roommates = Array.new

  @other_roommates = current_house.house_tenant.where("active = '1' AND person_id != ?", current_user.id)

我想要做的是使用来自每个 HouseTenants 的相关对象 Person 创建一个数组,但是当我这样做时,我得到与上面完全相同的数组:

  @other_roommates = Array.new

  joins = current_house.house_tenant.where("active = '1' AND person_id != ?", current_user.id)

  joins.each do |join|
    @other_roommates << join.person
  end

我希望在上述情况下,该数组将包含与其中的 house_tenant 对象相关的 2 个 Person 对象。我可以通过枚举 other_roommate 数组并在每个对象上调用 .person 来访问视图中的那些 Person 对象,但它在应用程序控制器中不起作用是没有意义的。为了进一步混淆我,我又尝试了 2 个测试:

  for x in 0..joins.count - 1
    @other_roommates << joins[x]
  end

  for x in 0..joins.count - 1
    @other_roommates << x
  end

当我输出数组的内容时,两个例子都给了我完全相同的东西“0, 1”,或者 x 的值。这是视图中的循环:

<% other_roommates.each do |roommate| %>
<%= roommate %>
<% end %>

值得一提的是,所有这些都在 Heroku Cedar 堆栈上运行。我知道这可能是一个基本问题,但我不知道我做错了什么。任何帮助深表感谢!

编辑:这是模型类的关系。如果我在视图中而不是在 ApplicationController 中执行它,我可以以完全相同的方式遍历对象,只是由于某种原因在这里它不起作用。

class HouseTenant < ActiveRecord::Base
  belongs_to :house
  belongs_to :person
end


class House < ActiveRecord::Base
  has_many :house_tenant
end

class Person < ActiveRecord::Base
  has_many :house_tenant
end

house_tenant 的架构具有“house_id”和“person_id”,并且这些关系在控制台中也可以正常工作。

4

0 回答 0