why strong parameters for the CREATE, but not NEW, in a rails controller?

Refresh

February 2019

Views

528 time

1

I am confused as to why, in an example Articles Controller, the create method is utilizing strong parameters, but the new method isn't?

   def new
        @article = Article.new
    end

    def create
        @article = Article.new(article_param)
        if @article.save
            redirect_to @article
        else
            render "new"
        end
    end

3 answers

3

Поскольку strong_parameters есть для белого списка Params перед обновлением или создать запись. В то время как на newили editдействия есть не какие - либо действия над БД записей, и это не нужно никаких Params в белый список. На updateи createконтроллер действий есть действие над БД, а также любые параметры , которые не из белого списка запрещено.

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

Наиболее распространенным примером является , когда: В вашем браузере вы можете изменить имя поля и изменить , <input name=user[name] ...>чтобы <input name=user[admin] ...>затем при значении изменения формы в «1» и нажмите кнопку. Без сильных параметров user[:admin]является допустимым параметром и переодеться в базе данных. Кроме того, на newили editдействия, не существует никакого риска какого - либо влияния на дб, потому что вы только отправив форму в браузере.

1

The new method just instantiates a new object. The create method is responsible for assigning the attributes and writing them to the database.

After calling .new, your article is just an empty shell, therefore no params are needed.

The new article is used so the page can render the proper form. Also, on the new action there aren't any params in the controller, the user has simply clicked a new button so they can receive the view to create the new article.

Your params represent user entered data and aren't there until after the form is submitted.

0

The new method is the Form itself where the data is inputted by the User. It is submitted through the create method which is where your app will recognize the specifications of your form and will accept or reject elements inputted by the User. For example if you have an integer assigned to a table element and a User input a float/decimal into your form the new form will accept the input but actually only create an integer without a decimal for that number inputted when it is rendered in the views.