0

Я играю с Rails 3.2.13 и жемчугом strong_parameters. Я хотел знать, должен ли я получать повышенное исключение от ActiveModel::ForbiddenAttributes, когда я тестирую его в разработке?Исключения рельсов 3.2.13 и strong_parameters

Мои сообщения модель имеет :title и :content, но если я удалю :title от разрешения, я не получаю сообщение об ошибке, но я попадаю обратно на страницу редактирования с флэш-уведомления, поэтому она сохраняется запись. Хотя, это не изменило :title, по праву. Это поведение по умолчанию?

def post_params 
    params.require(:post).permit(:content) 
    end 

Я хотел знать, нужно ли мне что-то делать, чтобы получить повышенное исключение.

Gemfile: конфиг

# Gemfile 
gem 'rails', '3.2.13' 
gem "strong_parameters" 

Применение:

# config/application.rb 
config.active_record.whitelist_attributes = false 

Сообщение Модель:

# post.rb model 
class Post < ActiveRecord::Base 
    include ActiveModel::ForbiddenAttributesProtection 
end 

Сообщение Контроллер:

# post_controller.rb 
class PostsController < ApplicationController 

    def update 
    @post = Post.find(params[:id]) 
    if @post.update_attributes(post_params) 
     redirect_to edit_post_path(@post), flash { success: "Post updated" } 
    else 
     render "edit" 
    end 
    end 


    private 

    def post_params 
    params.require(:post).permit(:title, :content) 
    end 
end 

ответ

4

Конфигурация по умолчанию состоит в том, чтобы регистрировать исключение в средах разработки и тестирования, и даже не в производстве. То, что вы видите, - это нормальное поведение, присваивание терпит неудачу.

Чтобы поднять исключение, вам необходимо изменить значение по умолчанию в желаемой среде. Например, конфигурация/среда/development.rb:

# Raises an error on unpermitted attributes assignment 
    config.action_controller.action_on_unpermitted_parameters = :raise # default is :log 

Надежда, что помогает,