Как искать один объект и возвращать другой связанный объект
Я пытаюсь создать форму поиска, когда пользователь ищет курс, он возвращает список имен пользователей, которые проходят этот курс. Итак, у меня есть таблица пользователя, таблица курса и таблица соединения с курсом пользователя. Я хочу использовать metasearch или ransack. Но я Интересно, как бы я использовал их в моем случае. Спасибо заранее.
create_table "users", :force => true do |t|
t.string "firstname"
t.string "email"
t.string "encrypted_password", :limit => 128, :default => "", :null => false
t.string "password_salt", :default => "", :null => false
end
create_table "courses", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
t.integer "school_id", :null => false
end
create_table "user_courses", :force => true do |t|
t.integer "user_id", :null => false
t.integer "course_id", :null => false
t.boolean "active", :null => false
end
class User < ActiveRecord::Base
has_many :user_courses
has_many :courses, :through => :user_courses
has_many :active_courses, :through => :user_courses, :source => :course, :conditions => {'user_courses.active' => true}
has_many :taken_courses, :through => :user_courses, :source => :course, :conditions => {'user_courses.active' => false}
end
class UserCourse < ActiveRecord::Base
belongs_to :user
belongs_to :course
end
class Course < ActiveRecord::Base
validates_presence_of :name
has_many :user_courses
belongs_to :school
end
1 ответ
Решение
Вы можете добавить это к вашей модели курса:
has_many :users, :through => :user_courses
Тогда вы можете получить пользователей из курса, как так
Course.find(1).users