2017-05-06 59 views
0

我有兩個模型,用戶和課程。如何選擇具有其他對象實例的所有對象(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

用戶當然也是課程的導師?你說每個課程只有一個用戶。 –

+0

嗨,我添加了架構。該協會是一對多。課程屬於用戶。 – helpmeplz

回答

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

有一個錯字,它應該是'.includes(:user)'。希望它有幫助.. –

+0

謝謝。修復。 –

相關問題