- vừa được xem lúc

Validation Context trong ActiveRecord

0 0 22

Người đăng: Phuc Dang Xuan

Theo Viblo Asia

image.png

Giới thiệu

Validation contexts là một tính năng vô cùng thiết thực của ActiveRecord. Đó là một cách để ràng buộc xác thực mô hình trong một ngữ cảnh sử dụng cụ thể cho một bản ghi.

Cách dùng

Ở đây mình có 1 model là User

class User < ApplicationRecord belongs_to :club, optional: true validates :name, presence: { message: "must be given please" } validates :club, presence: { message: "must be given please" }
end

name và club được validate cả khi create hoặc update user. Vấn đề ở đây là mình chỉ muốn validate cho một action nào đó thì làm thế nào? Rất đơn giản, Rails đã cung cấp cho ta một giá trị tuỳ chọn on cho phép ta có thể kiểm soát thời điểm validate.

class User < ApplicationRecord belongs_to :club, optional: true validates :name, presence: { message: "must be given please" }, on: :create validates :club, presence: { message: "must be given please" }, on: :update
end

Điều này cho phép create user mà không cần phải có club, nhưng sẽ bị validte trong trường hợp update user. Điều này thường được sử dụng để cho phép người dùng đăng ký với lượng thông tin tối thiểu và sau đó buộc họ cập nhật hồ sơ của mình với nhiều thông tin hơn trong các lần truy cập tiếp theo.

Giá trị cho tùy chọn on không bị giới hạn chỉ cho việc để create và update mà chúng ta có thể tự tạo custom contexts của riêng mình.

class User < ApplicationRecord validate :basic_info, on: :basic_info validate :education_details, on: :education_details validate :professional_info, on: :professional_info private def basic_info # Validation for basic info, first_name, last_name, email end def education_details # Validation for education_details end def professional_info # Validation for professional_info end
end

Trong user controller ta viết như sau:

class UsersController < ApplicationController #do_something def update_basic_info @user.assign_attributes(basic_info_params) @user.save(:basic_info) end def update_education_details @user.assign_attributes(education_details_params) @user.save(:education_details) end def update_professional_info @user.assign_attributes(professional_info_params) @user.save(:professional_info) end private def basic_info_params # strong params end def education_details_params # strong params end def professional_info_params # strong params end
end

Từ Rails 5 trở đi đã hỗ trợ cho nhiều context, chúng ta có thể sử dụng nhiều context cùng nhau

@user.save(:basic_info, :professional_info)

Ngoài ra, chúng ta có thể dùng nhiều validation trong cùng 1 context với with_options

with_options on: :create do validates :name, presence: true validates :email, presence: true
end

Trên đây mình trình bày sơ lược về cách sử dụng validation context. Hi vọng nó giúp ích được cho các bạn. Cảm ơn các bạn đã theo dõi!

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tôi cá là bạn không biết những điều này - Ruby on rails ( Phần 2)

Các bạn có thể theo dõi phần 1 ở đây :. https://viblo.asia/p/toi-ca-la-ban-khong-biet-nhung-dieu-nay-ruby-on-rails-phan-1-WAyK8DDeKxX. 5.

0 0 222

- vừa được xem lúc

Rails Memoization

Memoization is a process that can be used to speed up rails methods. It caches the results of methods that do time-consuming work, work that only needs to be done once. Here is an example. Example.

0 0 48

- vừa được xem lúc

Tại sao Rails lại dùng cả Webpack lẫn Sprocket?

Khi Rails 6 được ra mắt, có thể bạn đã từng tự hỏi. WTF, sao Webpack đã được add vào rồi, mà Sprocket vẫn tồn tại thế kia . Chẳng phải Webpack và Sprocket được dùng để giải quyết chung một công việc hay sao. Hoặc cả đây:.

0 0 59

- vừa được xem lúc

Bạn nên sử dụng Elasticsearch trong ứng dụng Ruby On Rails như thế nào?

Elasticsearch là một công cụ phân tích và mã nguồn mở mạnh mẽ và linh hoạt, phân tán, theo thời gian thực. Đó là tiêu chuẩn vàng trong công nghệ tìm kiếm.

0 0 80

- vừa được xem lúc

Form object pattern trong rails

1.Mở đầu.

0 0 111

- vừa được xem lúc

Sử dụng Twilio để gửi SMS trong ứng dụng Ruby on Rails

Ngoài cách xác nhận tài khoản hay gửi thông báo bằng email thì hôm nay mình sẽ hướng dẫn các bạn 1 cách nữa là thông qua SMS/Voice. Công cụ sử dụng sẽ là gem Twilio. Installation. Để cài đặt bằng Bundler, hãy lấy phiên bản mới nhất:.

0 0 67