Những thay đổi từ Rails 4 đến Rails 5
Bài đăng này đã không được cập nhật trong 8 năm
Đối với lập trình viên đã quen thuộc với Rails 4 hoặc những người mới học Rails khi khi tìm hiểu những vấn đề đươc giải đáp từ trước đây bởi Rails 4 thì việc bỡ ngỡ với những thay đổi trong phiên bản mới là điều khó tránh khỏi. Trong bài viết này mình xin giới thiệu một số những thay đổi khi của Rails khi Rails 5 ra mắt so với Rails 4.
Quan hệ belongs_to được mặc định là required
Xây dựng quan hệ belongs_to
Trong phần giới thiệu này mình xin phép sử dụng quan hệ sau để minh họa.
class Question < ApplicationRecord
has_many :questions
end
class Anser < ApplicationRecord
belongs_to :question
end
Với Rails 4
Khi chúng ta sử dụng mối quan hệ tương tự như trên trong Rails 4. Để thêm validation cho chúng, ta cân phải thêm option required :true như sau
class Question < ApplicationRecord
has_many :questions
end
class Anser < ApplicationRecord
belongs_to :question, required: true
end
Required là mặc định với Rails 5
Trong Rails 5, option trên được mặc định cho mối quan hệ belongs_to. Dẫn đến việc ta có thể gặp phải thông báo validation như sau cho mối quan hệ này.
answer = Answer.create(content: 'Hi')
=> <Question id: nil, content: "Hi", created_at: nil, updated_at: nil>
answer.errors.full_messages.to_sentence
=> "Question must exist"
Làm thế nào để tránh gặp phải lỗi trên?
Trong mối quan hệ trên, để có thể tạo được answer độc lập với Question. ta chỉ cần thêm option
class Post < ApplicationRecord
belongs_to :user, optional: true
end
và đây là kết quả thu được
answer = Answer.create(title: 'Hi')
=> <Answer id: , title: "Hi", question_id: nil>
All rights reserved