people テーブルに作成された適切な外部キーを持つ 2 つのモデルがあります。
class Person < ActiveRecord::Base
belongs_to :family
class Family < ActiveRecord::Base
has_many :people
次のようにすると、オブジェクト @family_members がインスタンス変数として取得され、問題はありません。
@family_members = Family.find(1)
私のビューでは、'child' people テーブル フィールドに簡単にアクセスできます。
@family_members.people.first_name
ただし、「where」などでarelの方法を使用すると、通常のオブジェクトではなく「ActiveRecord::Relation」が取得され、同じ「first_name」フィールドフォームの people テーブルにアクセスする方法がわかりません上記でアクセス:
@family_members = Family.where(:id => 1)
or even
@family_members = Family.joins(:people).where(:id => 1)
(「結合」も必要ですか??) 「.first」を使用するとクエリが実行されることを理解しています。
@family_members = Family.where(:id => 1).first
ただし、オブジェクトではなく配列を返すため、ビューで使用すると:
@family_members.people.first_name
「method 'people' unknown」というエラーが表示されます。
"find" によって作成されたオブジェクトで行ったように、ActiveRecord リレーションを使用して people テーブルの 'first_name' フィールドにアクセスするにはどうすればよいですか?
* 追加情報 7/15 * ** * ** * *
私が探しているものを明確にするために、Arel の代わりに SQL を書いていたら、次のように書きました。
SELECT f.home_phone, f.address, p.first_name, p.last_name, p.birthday
FROM families f INNER JOIN people p ON p.family.id = f.id WHERE family_id = 1
そのクエリの結果を結果セットにロードすると、次のようにアクセスできます。
myResultSet("home_phone") -- the home_phone from the families table
myResultSet("address") -- the address from the families table
myResultSet("first_name") -- the first_name from the people table
myResultSet("birthdate") -- the birthdate from the people table
クエリ内の 2 つのテーブルに同じ名前のフィールドがある場合は、"AS" を使用して、フィールドの 1 つを別の名前で要求します。私はこの種のクエリ/結果セットを Web アプリで長年使用しており、Rails と ActiveRecord で同じことを行う方法を推測しようとしています。