2017-05-06 48 views
0

私は2つのモデルUserとCourseを持っています。別のオブジェクトのインスタンスを持つすべてのオブジェクトを選択する方法(has_manyとhas_oneの関連付け)?

ユーザーhas_manyコース。 コースhas_oneユーザー。

今、私はすべてのユーザーをつかんでコースインデックスページに表示していますが、私はコースを持っているユーザーのみを表示する必要があることに気付きました。私はこれを行う方法がわかりません?ここで

は、コースコントローラからの私のインデックスメソッドである:ここで

#courses_controller.rb 

def index 
    @courses = Course.all 
    @users = User.all 
    end 

は私のモデルです:

# user.rb 
class User < ApplicationRecord 
    # User has many courses 
    has_many :courses, dependent: :destroy 
end 

# course.rb 
class Course < ApplicationRecord 
    has_one :user 
validates :user_id, presence: true 
end 

そして、私のスキーマ:

ActiveRecord::Schema.define(version: 20170505114247) do 

    create_table "courses", force: :cascade do |t| 
    t.string "name" 
    t.string "prerequisite" 
    t.text  "description" 
    t.integer "user_id" 
    t.datetime "created_at", null: false 
    t.datetime "updated_at", null: false 
    t.string "picture" 
    t.index ["user_id", "created_at"], name: "index_courses_on_user_id_and_created_at" 
    t.index ["user_id"], name: "index_courses_on_user_id" 
    end 

    create_table "users", force: :cascade do |t| 
    t.string "name" 
    t.string "email" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.string "password_digest" 
    t.index ["email"], name: "index_users_on_email", unique: true 
    end 

end 
+0

スキーマを共有してください。あなたの 'コース'と 'ユーザー'はどうつながっていますか? many_to_many関係があるはずです。 –

+0

それでは、ユーザーはコースのインストラクターですか?各コースには1人のユーザーしかいないということです。 –

+0

こんにちは、私はスキーマを追加しました。この協会は1対多です。コースはユーザーに属します。 – helpmeplz

答えて

1

1対があるので、 - ユーザーとコース間の多くの関連付け、そしてコースインデックスページでの各コースの繰り返し時に使用を含めることができますr情報。 @users = User.allをコントローラに含める必要はありません。だからあなたのイテレータは、コントローラでは、この

次のようになります。

@courses = Course.includes(:user).all #to avoid n+1 query 

あなたのビュー:

# app/views/courses/index.html.erb 
<% @courses.each do |course| %> 
    <%= course.name %> 
    <%= course.description %> 
    <%= course.user.name %> 
<% end %> 
+0

typoがあります。 '.includes(:user)'にする必要があります。希望がそれを助ける.. –

+0

ありがとう。修正しました。 –

関連する問題