2013-04-26 46 views
5

Có thể đánh dấu một thuộc tính duy nhất của một băm theo yêu cầu sử dụng thông số mạnh không?Thông số mạnh yêu cầu thuộc tính

đầu vào Với như:

{ 
    "example" => { 
    "optional": 1234, 
    "required": 5678 
    } 
} 

Tiêu chuẩn params mạnh ví dụ là:

params.require(:example).permit(:optional, :required)

Cho rằng bạn có thể yêu cầu các thông số nhất định, tôi nghĩ sau đây sẽ làm việc:

params.require(:example).require(:required) 
params.require(:example).permit(:optional) 

Tôi đã cố gắng:

params.require(:example => [ :required ]).permit(:optional) 
params.require(:example).permit(:optional) 
params[:example].require(:required) 

Và bất kỳ điều gì khác tôi có thể nghĩ đến.

Có ai biết nếu có thể không?

Trả lời

5

Greg!

Tôi có cùng một câu hỏi, nhưng sau tất cả những gì tôi thấy, đó là câu hỏi không phù hợp.

Look, đây là mã nguồn của yêu cầu phương pháp trong strong_parameters đá quý:

def require(key) 
    self[key].presence || raise(ActionController::ParameterMissing.new(key)) 
end 

Vì vậy, về cơ bản, không có cách nào để yêu cầu "cần" thuộc tính trong params băm. Nhưng nhìn vào nó từ phía bên kia. Tôi nghĩ rằng nó tốt hơn viết phương pháp yêu cầu của riêng bạn để làm điều đó. Vì tôi đang sử dụng đường ray, tôi chỉ cần thêm validates_presence_of vào mẫu. Nếu bạn muốn làm cho nó động, bạn có thể tạo xác nhận tùy chỉnh. Bạn có thể tìm thấy tài liệu của mình ở đây:

http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#performing-custom-validations

+0

Cảm ơn RunFor. Tôi đến cùng một kết luận. Trong trường hợp của tôi, yêu cầu hiện diện là có điều kiện đối với cách truy cập tài nguyên (tức là thông qua bộ điều khiển) nhưng tôi đã có thể đưa vào một số xác nhận hợp lệ để giúp điều này. –

0

Những gì bạn có thể làm là sử dụng

def example_params 
    params.require(:example) 
    params[:example].require(:required) 
    params.require(:example).permit(:required, :optional) 
end 

Dòng đầu tiên thất bại nếu :example là mất tích. Dòng thứ hai thất bại nếu thiếu :required từ :example. Dòng thứ ba trả về những gì bạn mong đợi, trong khi cho phép :optional.

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