我正在尝试在应用程序控制器的 :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”,并且这些关系在控制台中也可以正常工作。