2012-03-02 3 views
0

c/C++からのRuby/Railsの新種で、私のベビー・ステップをやっています。 私は次の問題に対する最も洗練された解決策を見つけようとしています。 テーブルAは、テーブルBへの外部キー(b_idと呼ぶ)を持ち、テーブルBは、名前フィールドとプライマリ(ID)フィールドを持っています。アクティブなレコード/ Ruby on Railsの別の検索のために複数のオブジェクトを取得する

いくつかの基準に基づいて、Aからオブジェクトのリストを取得したい場合は、このリストのb_idを使用してテーブルBにアクセスし、名前(名前フィールド)を取得します。

私は失敗する多くのことを試みてきました。私はここで何か根本的なものが欠けていると思う。

curr_names = B.where(id: curr_users.first().b_id) # ok 

私はcurr_usersを反復して構築することができます...

curr_names = B.where(id: curr_users.all().b_id) # fails, doesn't recognize b_id 

以下の作品が、それは、単一のユーザーを処理します。

curr_users = A.Where(condition) 
curr_names = B.where(id: curr_users.b_id) # fails 
も試み

を: 私が試しました外部キーの配列とそれをBにアクセスするために使用しますが、これを行うにはよりエレガントな方法が必要であるようです。 私はここで何が欠けていますか?

乾杯。簡単にするために

答えて

0

、のではなく、AとB

コメントは記事を指して外部キーのarticle_idを持って

の、記事とコメントの例を見てみましょう、私たちは、セットアップ条からhas_many関係がコメントすることができ、そのような記事へのコメントからbelongs_to関係:あなたはあなたができるようになる、というたら

class Article < ActiveRecord::Base 
    has_many :comments 
end 

class Comment < ActiveRecord::Base 
    belongs_to :article 
end 

<article>.commentsとRailsは、その記事の外部キーを持っているすべてのコメントの配列を吐き出すだろうか。より複雑なクエリを設定しようとしている場合(たとえば、特定の日付より前に作成されたすべてのコメントなど)を除き、条件文を使用する必要はありません。

すべてのコメントのタイトル(例の名前)を取得するには、<article>.comments.map(&:title)を実行します。あなたがモデル以下していると仮定すると、

1

class Employee 
    belongs_to :department 
end 

class Department 
    has_many :employees 
end 

は今、あなたはあなたの例では、一部の従業員のフィルタ

# departments with employees from California 
Department.include(:employees).where(:employees => {:state => "CA"}).pluck(:name) 
+0

部門に部門をベースとすることができ、私が持っているものに似ている、従業員へのFKを持っています。 SQLite3 :: SQLException:列がありません:employees.days:SELECT name FROM "departments" WHERE "employees"。 "days" – user1115660

+0

エラーメッセージのSQLに ' JOIN claseが見つからないので大丈夫です。 'include'節を追加することを忘れましたか? –

関連する問題