1

アプリケーションコントローラーの :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」があり、関係はコンソールでも問題なく機能します。

4

0 に答える 0