我有两个模型,用户和课程。
用户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 :(得分:1)
由于用户和课程之间存在一对多关联,因此当您遍历每个课程时,您可以在课程索引页面上包含用户信息。您不需要在控制器中包含@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 %>