has_many関係の間に追加のプロパティを追加することを検討していました。has_many関係で使用すると、結合テーブルの余分な属性にアクセスする
たとえば、私はUsersテーブルとGroupテーブルを持っています。ユーザーは:through has_many関係でグループに参加できます。私はそのグループのユーザーの '役割'のプロパティを追加したいと思います。
create_table "groupization", :force => true do |t|
t.integer "user_id"
t.integer "group_id"
t.string "role"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
私はどのようにロール属性にアクセスできますか。私のような何かを考えていた:
user.groups[0].role
をことは正しいアプローチですか?私は構文が間違っていることを知っている(私はそれを試した);正しい構文はどのようなものでしょうか?ありがとう!
これは 'user.groupizations.find_by_group_id(user.groups.first).role'に少し簡略化できると思います。 Rails 3.1以降では、 '#first'を使うとより速くなるはずです。なぜなら'#[] 'はすべてのレコードを強制的に取り出すのに対し、単一の行を検索するからです。 –
はい、私はもともと 'user.groups.first'を持っていましたが、私は、ニュートンがどのようにグループにアクセスしていたかに沿ってそれを変更しました。しかし、私が言ったように、なぜこのように最初のグループだけの「役割」が任意にアクセスされるのか想像できません。 –
私は不明であったと思う。単純化は '.id'の省略です。通常はモデルインスタンスをファインダ引数として渡すことができ、ActiveRecordはそのインスタンスからid値を使用する必要があることを認識します。 –