アプリケーションコントローラーの :helper_method で Ruby on Rails の配列にオブジェクトを追加しようとしています。この例では、other_roommates は、house_tenant タイプの 2 つのオブジェクトを含む配列として返されます。これは、まさに私が期待するものです。
@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 オブジェクトにアクセスできますが、ここで Application Controller で機能しないのは意味がありません。さらに混乱させるために、さらに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」があり、関係はコンソールでも問題なく機能します。