12/08/2018, 13:51

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>
0