2012-01-21 24 views
5

Tôi có một cái gì đó như:Làm thế nào để xác định các lĩnh vực đặt cho accepts_nested_attributes_for trong ActiveRecord

class Profile < ActiveRecord::Base 
    belongs_to :user  
    delegate :full_name, :to => :user 

    accepts_nested_attributes_for :user 
    ....... 

này làm việc tốt như tôi muốn hồ sơ để có thể thiết lập first_name và last_name trong người dùng. Nhưng điều này đặt ra mối đe dọa bảo mật nếu người dùng tiêm các tham số khác trong biểu mẫu.

Cách thực hiện accept_nested_attributes_for chỉ mất first_name và last_name và thả các tham số khác?

Trả lời

0

Có hai tùy chọn mà tôi có thể nghĩ đến và chúng thực sự giống như cách bạn sẽ xử lý việc gán hàng loạt mà không phải thông qua anaf.

  1. accept_nested_attributes_for sẽ tôn trọng attrs_accessible trên mô hình người dùng. Nếu bạn chỉ định rằng một thuộc tính không được tiếp xúc với gán khối trên mô hình người dùng, nó sẽ không thể được gán thông qua accept_nested_attributes_for.

  2. Bạn có thể xử lý vệ sinh trong bộ điều khiển tiểu sử của mình. Các thuộc tính sẽ được chuyển tới mô hình người dùng sẽ đến dưới các tham số [: profile] [: user_attributes]. Sau đó, bạn có thể sử dụng slice để chỉ nhận các thuộc tính bạn muốn cho phép hoặc sử dụng except để xóa các thuộc tính bạn không muốn cho phép. Mặc dù tôi thích các thuộc tính được cho phép trong danh sách cho phép so với danh sách đen.

Lựa chọn 1 sẽ ảnh hưởng đến bất cứ nơi nào bạn đang sử dụng phân khối cho mô hình của người dùng, trong khi phương án 2 sẽ chỉ ảnh hưởng đến các thông số đến trong thông qua bộ điều khiển hồ sơ

Các vấn đề liên quan