2014-11-12 5 views
1

Я не совсем понимаю цель params.require - более конкретно, что для него полезно, чтобы вызвать исключение при отсутствии параметра.Какой вариант использования paramsrequire?

Я знаю, что может потребоваться наличие некоторых параметров для данного запроса, но почему я хочу вернуть ошибку сервера 500, если какой-либо из них отсутствует? Почему бы мне не пересекать параметры для параметров, которые я хочу использовать условной логикой, и вместо этого возвращать flash[:error]?

+0

идея заключается в том, что вы используете 'params.require', то вы могли бы обработать ошибку https://github.com/rails/strong_parameters#handling-of-unpermitted-keys – juanpastas

+0

вариант вы упомянуть также действителен, но на первый взгляд кажется, что params.require может создать более короткий код ... возможно – juanpastas

ответ

0

Это связано с использованием Rails с использованием сильных параметров, см. Strong Parameters. Ive наклеил раздел на Strong Parameters в нижней части ответа

В отличие от других платформ, которые переименовывают все в белый список и требуют внесения в черный список параметров, Rails делает обратное. Все внесено в черный список, и вам необходимо присваивать белые параметры параметрам, которые вы хотите разрешить, посредством массового присвоения.

Следовательно, если вы попытаетесь сохранить объект и не разрешили определенный параметр, в вашем журнале/консоли вы увидите «Непредставленные параметры:».

Его наилучшая практика для выполнения действий по сохранению/обновлению с помощью параметров запроса и белого списка, которые вы хотите разрешить.

Сильные параметры

С сильными параметрами, параметры контроллера Действие запрещено использовать в активной модели массовых заданий, пока они не были в белый список. Это означает, что вам нужно будет сделать сознательный выбор, какие атрибуты позволят массовое обновление и, таким образом, предотвратить случайное раскрытие того, что не должно быть раскрыто.

Кроме того, параметры могут быть отмечены как необходимо и протекать через предопределенный поток подъема/спасения, чтобы в итоге получить 400 Bad Request без каких-либо усилий.

class PeopleController < ActionController::Base 
    # This will raise an ActiveModel::ForbiddenAttributes exception 
    # because it's using mass assignment without an explicit permit 
    # step. 
    def create 
    Person.create(params[:person]) 
    end 

    # This will pass with flying colors as long as there's a person key 
    # in the parameters, otherwise it'll raise a 
    # ActionController::ParameterMissing exception, which will get 
    # caught by ActionController::Base and turned into that 400 Bad 
    # Request reply. 
    def update 
    person = current_account.people.find(params[:id]) 
    person.update!(person_params) 
    redirect_to person 
    end 

    private 
    # Using a private method to encapsulate the permissible parameters 
    # is just a good pattern since you'll be able to reuse the same 
    # permit list between create and update. Also, you can specialize 
    # this method with per-user checking of permissible attributes. 
    def person_params 
     params.require(:person).permit(:name, :age) 
    end 
end