Strong Parameters
Bài đăng này đã không được cập nhật trong 8 năm
Strong Parameters
Action Controller parameters bị cấm sử dụng với tính năng Mass Assignment (cho phép update 1 model) trong Active Model, vì vậy chúng ta phải quyết định những attributes nào được phép mass update. Parameters được mark là cần thiết. Khi tất cả các params yêu cầu được không được thỏa mãn thì kết quả sẽ trả về là 400 Bad Request.
# không sử dụng mass assignment
user = User.find(1)
user.name = "Your name"
user.email = "youremail@email.com"
user.save
# Sử dụng mass assignment
user = User.find(1)
user.update( name = "Your name", email = "youremail@email.com")
Strong parameters ngăn chặn việc ta không kiểm soát được những giá trị trong params.
class PeopleController < ActionController::Base
def create
User.create(params[:person])
end
def update
user = User.find(params[:id])
user.update!(user_params)
end
private
def person_params
params.require(:user).permit(:name, :email)
end
end
Cách sử dụng
require(:user) bắt buộc trong params phải có key là user
permit(:name, :email) trong key user chỉ cho phép name và email
Nested Parameters
params.permit(:name, { emails: [] },
friends: [ :name,
{ family: [ :name ], hobbies: [] }])
định nghĩa các params được phép thay đổi gồm name, emails, và friends attributes, trong đó emails là một mảng các giá trị vô hướng tương tự với hobbies.
Ví dụ khác
Khi bạn muốn sử dụng các attributes mà chúng chưa được sinh ra khi gọi mới:
params.fetch(:blog, {}).permit(:title, :author)
#nếu params[:blog] có thể sử dụng :title và :author, nếu không thì trả về {}
Bên ngoài phạm vi của Params
Các API Strong params được thiết kế chủ yếu trong các trường hợp thông thường. Không có nghĩa là nó có thể xử lý hết các params mà bạn cần sử dụng. Tuy nhiên có thể dễ dàng kết hợp API cho trường hợp này.
def product_params
params.require(:product).permit(:name,
data: params[:product][:data].try(:keys))
end
Mong bài viết này có ích cho bạn! Thân.
All rights reserved