Những thay đổi từ Rails 4 đến Rails 5
Đố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 ...
Đố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.
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>