Trong Rails 4 here is the question về CÁCH làm điều này. Những gì tôi muốn biết là, mặc dù điều này hoạt động, TẠI SAO nhật ký vẫn phàn nàn?Rails 5.1 - Tham số JSON được cho phép nhưng vẫn in dưới dạng chưa được gửi trong nhật ký
Trong Rails 5.1.3 Tôi có một cột JSON (letterhead
) là một trong những thuộc tính mô hình của tôi (và bên trong json đó là một băm với các thuộc tính khác nhau mà tôi không quan tâm về danh sách trắng). Tôi chỉ muốn cho phép/đưa vào danh sách trắng chính cột đó.
Note on Rails 5.1.4
Có một cách Rails để làm điều này trong 5.1.4, xem this commit. Có một cuộc thảo luận khá dài here về github về điều này. Trong Rails 5.1.4 nó chỉ đơn giản đây là:
def account_params
params.require(:account).permit(:id, :name, :plan_id, letterhead: {})
end
Tham số :letterhead
được phép, không có lỗi cho thấy trong nhật ký và các mô hình tiết kiệm. Nhưng rõ ràng nó cho phép đầu vào tùy ý bên trong tham số đó, do đó, sử dụng cẩn thận.
Nếu bạn muốn hạn chế mà các phím băm được phép vào bên trong một tham số như vậy, sau đó bạn cũng có thể tạo danh sách trắng đó, như thế này ví dụ:
def account_params
params.require(:account).permit(:id, :name, :plan_id, letterhead: [:address, :logo, :contact_info])
end
này bây giờ ngăn bất kỳ phím tùy ý khác bên trong :letterhead
kể từ khi tôi đã dứt khoát chỉ được phép những 3 - :address, :logo, :contact_info
Rails 5.1.3 (trở về trước)
012.tôi có thể cho phép cột này bằng cách sử dụng các nội dung sau (xem thảo luận liên kết cho các tùy chọn có thể khác cũng):
Lựa chọn 1
def account_params
params.require(:account).permit(:id, :name, :plan_id, :letterhead).tap do |whitelisted|
whitelisted[:letterhead] = params[:account].fetch(:letterhead, ActionController::Parameters.new).permit!
end
end
Lựa chọn 2
def account_params
params.require(:account).permit(:id, :name, :plan_id, :letterhead).tap do |whitelisted|
whitelisted[:letterhead] = params[:account][:letterhead].permit!
end
end
Trong cả hai trường hợp, mô hình tiết kiệm nhưng trong nhật ký nó vẫn nói "thông số chưa được gửi: tiêu đề thư"
Tại sao vẫn nói rằng khi tôi đã cho phép rõ ràng?
Ngoài ra, có sự khác biệt thực sự nào giữa Tùy chọn 1 và Tùy chọn 2 không?
EDIT
dữ liệu là như thế này:
{"id"=>"a61151b8-deed-4efa-8cad-da1b143196c9",
"plan_id"=>"1dc49acf-3111-4030-aea1-7db259b53a51",
"name"=>"Test Account 1",
"is_active"=>true,
"letterhead"=>{"left"=>"", "center"=>"", "right"=>""},
"created_by"=>nil,
"updated_by"=>nil,
"created_at"=>"2017-10-14T19:05:40.197Z",
"updated_at"=>"2017-10-20T15:14:08.194Z"}
Dữ liệu đến của bạn có dạng như thế nào? – 7urkm3n
@ 7urkm3n Tôi đã thêm bản chỉnh sửa hiển thị dữ liệu – rmcsharry
bạn thấy lỗi nào (khiếu nại)? Bạn có thể đăng nhật ký và phương thức sử dụng không? – 7urkm3n