2016-12-22 7 views
0

簡単な概要を説明するために、私はモデルインストラクター、コースタイプ、およびマテリアルを含むコースシステムを用意しています。各インストラクタがタイプ(instructor_types)に接続し、タイプが材料(material_types)に接続するための2つの結合(has_many through)テーブルがあります。ジョインによるジョインによる関係レコードの検索

instructor_typesテーブルの例:

id, type_id, instructor_id 
1, 2,  1 
2, 3,  1 

material_typesテーブルの例:

id, material_id, type_id 
1, 1,   2 
2, 2,   2 

IDがinstructor_typesテーブルにありますインストラクターのが唯一のmaterial_typesにTYPE_IDに合わせ材料レコードを見つけることができるはずです表。

私は(material.rbモデルで)試してみた:私は、レコード、単純にビューでレンダリングしようとしているのMySQLエラー

Mysql2::Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT `types`.* FROM `types` INNER JOIN `instructor_types` ON `types`.`id` = `i' at line 1: SELECT `materials`.* FROM `materials` INNER JOIN `material_types` ON `material_types`.`material_id` = `materials`.`id` WHERE (type_id = SELECT `types`.* FROM `types` INNER JOIN `instructor_types` ON `types`.`id` = `instructor_types`.`type_id` WHERE `instructor_types`.`instructor_id` = 1) 

を生成

has_many :material_types, :dependent => :destroy 
has_many :types, through: :material_types 

def self.list_type_permissions(instructor) #current instructor id 
@materials = self.joins(:material_types).where('type_id = ?', instructor.types) 
end 

ループ:

<% @materials.each do |material| %> 
<li><%= material.title %></li> 
<% end %> 

答えて

0

あなたはに出願type_idにアクセスしているので、テーブルでは、ARクエリで指定する必要があります。これを試してみてください:(あなたがmemoizingされていない限り)とself

joins(:material_types).where(material_types: { type_id: instructor.type_ids }) 

あなたはインスタンス変数をドロップすることができます。

関連する問題