レールから必要なカラムを取得する方法がわかりません。私は2つのモデル - ユーザーとプロファイルを持っています。ユーザー:(ユーザーが自分のプロフィールの以前のバージョンに戻すことができるので)has_manyのプロフィール:Railsジョイントテーブルのジョインとインクルードテーブルを含む
> SELECT * FROM profiles JOIN users ON profiles.user_id = users.id LIMIT 1;
+----+-----------+----------+---------------------+---------+---------------+-----+
| id | username | password | last_login | user_id | first_name | ... |
+----+-----------+----------+---------------------+---------+---------------+-----+
| 1 | john | ****** | 2010-12-30 18:04:28 | 1 | John | ... |
+----+-----------+----------+---------------------+---------+---------------+-----+
:
> DESCRIBE users;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| username | varchar(255) | NO | UNI | NULL | |
| password | varchar(255) | NO | | NULL | |
| last_login | datetime | YES | | NULL | |
+----------------+--------------+------+-----+---------+----------------+
> DESCRIBE profiles;
+----------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | NO | MUL | NULL | |
| first_name | varchar(255) | NO | | NULL | |
| last_name | varchar(255) | NO | | NULL | |
| . . . . . . |
| . . . . . . |
| . . . . . . |
+----------------+--------------+------+-----+---------+----------------+
SQLでは、私は、クエリを実行することができます
BOTHテーブルのすべての列を一緒にJOINEDする方法を参照してください。私はRailsの中に、この同じクエリを実行するとしかし、私は私が望むすべての列を得ることはありません - 私はプロフィールからそれらを取得:
# in rails console
>> p = Profile.joins(:user).limit(1)
>> [#<Profile ...>]
>> p.first_name
>> NoMethodError: undefined method `first_name' for #<ActiveRecord::Relation:0x102b521d0> from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.1/lib/active_record/relation.rb:373:in `method_missing' from (irb):8
# I do NOT want to do this (AKA I do NOT want to use "includes")
>> p.user
>> NoMethodError: undefined method `user' for #<ActiveRecord::Relation:0x102b521d0> from /Library/Ruby/Gems/1.8/gems/activerecord-3.0.1/lib/active_record/relation.rb:373:in method_missing' from (irb):9
私は(効率的に)すべてのプロパティを持つオブジェクトを返すようにしたいですプロフィールとユーザーをまとめて私は望んでいない:それは意味をなさないので、ユーザーを含める。ユーザーは、プロファイルモデル内のフィールドであるかのように、常に最新のプロファイルの一部である必要があります。これをどのように達成するのですか?
私は私はあなたがRailsのに参加して、ユーザーとプロファイルを読み込むことができないと思います
なぜユーザーモデルをプロファイルモデル内に入れたいのですか?あなたは明らかに2つの別々のモデル、プロファイルとユーザーを持っています。 includeを使用すると、両方のエンティティのデータを1つのクエリでフェッチしてから、単にprofile.userを実行することができます。 – aromero
その1つのクエリではないために... includeは2つのクエリを生成します – sethvargo