У меня есть модель User, разработанная после учебника Michael Hartl RoR, и я пытаюсь создать новую модель Учителя. Я хотел бы, чтобы у учителя было много пользователей, но у каждого пользователя был только один учитель. Я создал модель учителя сСоздание отношений has_and_belongs_to_many в Rails
class CreateTeachers < ActiveRecord::Migration
def change
create_table :teachers do |t|
t.string :name
t.string :email
t.string :phone
t.references :user, index: true, foreign_key: true
t.timestamps null: false
end
end
end
и добавил has_one :teacher
в user.rb. Вот модель teachers.rb
class Teacher < ActiveRecord::Base
has_and_belongs_to_many :users
validates :user_id, presence: true
before_save :downcase_email
validates :name, presence: true,
length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-]+(\.[a-z\d\-]+)*\.[a-z]+\z/i
validates :email, presence: true,
length: { maximum: 255 },
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
private
# Converts email to all lower-case.
def downcase_email
self.email = email.downcase
end
end
Однако в моем тестовом файле teacher_test.rb, вещи становятся немного размытыми. Я пробовал это
def setup
@user = users(:michael)
@user2 = users(:archer)
@user3 = users(:lana)
@user4 = users(:mallory)
@teacher = Teacher.new(name: "Phred Willard",
email: "[email protected]",
phone: "1234567890",
user_id: [@user.id,
@user2.id,
@user3.id,
@user4.id])
end
test "should be valid" do
assert @uac.valid?
end
но это не работает. Правильно ли я установил свои отношения? Я, очевидно, не добавляю пользователей правильно, так как модель не проходит проверку на достоверность. Как я могу добавить к этому учителю больше пользователей? Заранее спасибо.
Удивительный! Спасибо (еще раз). Если у меня есть новый пользовательский аккаунт, и они хотят выбрать существующего учителя, как бы я это сделал в контроллере? Я представляю себе что-то вроде '@teacher = Teacher.find (params [: teacher_id])', а затем '@ teacher.user_ids.add (params [: user_id])', но я сомневаюсь, что это правильно. Я не уверен, как добавить к списку в Rails. – mjswartz
'@teacher.users << User.find (params [: user_id]) ' –
http: // stackoverflow.com/a/7297369/1143732 –