Приложение представляет собой макет образовательного сайта в Rails 3.2.19. Существует модель курсов, модель студентов и модель наград. Я пытаюсь заполнить несколько записей, но, похоже, я не могу заполнять пользователей, имеющих курсы («предварительно зарегистрировать» их). Я знаю, что есть способ сделать это, но что такое синтаксис? Я пробовал каждую комбинацию, о которой я могу думать.Rails 3 как заполнить таблицу соединений с seeds.rb
Вот schema.rb
ActiveRecord::Schema.define(:version => 20141021184426) do
create_table "awards", :force => true do |t|
t.string "name"
t.integer "year"
t.integer "student_id"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "courses", :force => true do |t|
t.string "name"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
create_table "courses_students", :id => false, :force => true do |t|
t.integer "course_id", :null => false
t.integer "student_id", :null => false
end
add_index "courses_students", ["course_id", "student_id"],
:name =>"index_courses_students_on_course_id_and_student_id", :unique => true
create_table "students", :force => true do |t|
t.string "given_name"
t.string "middle_name"
t.string "family_name"
t.date "date_of_birth"
t.decimal "grade_point_average", :precision => 10, :scale => 0
t.date "start_date"
t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false
end
end
это course.rb ...
class Course < ActiveRecord::Base
attr_accessible :name, :student_id, :course_id
has_and_belongs_to_many :students
end
student.rb ...
class Student < ActiveRecord::Base
attr_accessible :date_of_birth, :family_name, :given_name, :grade_point_average,
:middle_name, :start_date, :student_id, :courses
has_many :awards, :dependent => :destroy
has_and_belongs_to_many :courses
def name
given_name + " " + family_name
end
def enrolled_in?(course)
self.courses.include?(course)
end
Защиту unenrolled_courses курс. найти (: все) - self.cursses конец конец
award.rb ...
class Award < ActiveRecord::Base
attr_accessible :name, :student_id, :year
# every award is linked to a student, through student_id
belongs_to :student
validates_existence_of :student, :both => false
end
Это seed.rb файл я получил до сих пор. Я могу назначить студенческие награды, но не курсы. Согласно схеме, я думаю, что я должен использовать автоматически сгенерированный course_id, но я не знаю, как ссылаться, что семена некоторых данных ...
Course.create(name: 'Australian History')
Course.create(name: 'Advanced Java Programming')
Course.create(name: 'Introduction to Rails')
Course.create(name: 'Psychology')
Student.create(given_name: 'Donna', middle_name: 'Louise', family_name:'Chang',
date_of_birth:'1981-11-04', grade_point_average: 3.55, start_date: '2014-01-13',
courses: Course(:name=> 'Australian History'))
Student.create(given_name: 'Barnabas', middle_name: 'Justin', family_name:'Bulpett',
date_of_birth: '1966-07-28', grade_point_average: 2.83, start_date: '2012-08-15')
Student.create(given_name: 'Cleveland', middle_name: 'Jackson', family_name:'Brown',
date_of_birth: '1976-02-18', grade_point_average: 3.96, start_date: '2011-08-18')
Award.create(name: 'Heisman Trophy', year: 2012, student_id: 3)
Award.create(name: 'Nobel Peace Prize', year: 2012, student_id: 1)
Award.create(name: 'Best Cinematography', year: 2012, student_id: 2)
Я надеюсь, что кто-то может помочь, это из книги (Learning Rails 3 - O'Reilly). В книге есть это приложение в примере, но я не вижу, где и как они его высевают. Спасибо, что посмотрели, любая помощь ценится много!
Редактировать: приведенное выше seeds.rb показывает попытку применить курс по имени курса (первому учащемуся). Это было сделано после попытки использования аналогичного подхода с использованием course_id.
Awesome! Он скомпилирован и отлично работает. Теперь, чтобы пройти несколько классов для этого ученика, я просто повторяю это (например, курсы: Course.where (name: 'foo'), курсы: Course.where (name: 'bar')) или есть способ передать массив или хэш? –
В том месте, где вы можете передать массив: курсы: Course.where (имя: ['foo', 'bar']), он будет переведен как «IN ('foo', 'bar')" в SQL-запросе –
Вы спасатель жизни! Надеюсь, другие выиграют от этого - СПАСИБО !! –