Я использую Rails 4.0.2, Ruby 2.0.0p353Rails Strong Параметры ActiveModel :: ForbiddenAttributesError не отображается
Я пытаюсь использовать сильные параметры в моем проекте Rails, но я не могу получить ActiveModel :: ForbiddenAttributesError появится.
Если есть параметры не разрешены, эти параметры будут установлены в 0 или 0, но я думал, что должна появиться ошибка ActiveModel :: ForbiddenAttributesError. Таким образом, параметры, которые не разрешены сильными параметрами, будут переданы в мою модель User как nil или 0, и это проблема для меня.
Ниже следующий мой UsersController:
class UsersController < ApplicationController
def new
@user = User.new
end
def create
@user = User.new(user_params)
if @user.save
sign_in @user
flash[:notice] = "Welcome to the league!"
redirect_to root_url
else
render 'new'
end
end
private
def user_params
params.require(:user).permit(:first_name, :last_name, :alias,
:email, :password, :password_confirmation)
end
end
Вот является форма подписки пользователя с помощью, simple_form 3.0.1, new.html.erb:
<%= simple_form_for(@user) do |f| %>
<h1>Sign Up</h1>
<%= f.input :first_name %>
<%= f.input :last_name %>
<%= f.input :alias %>
<%= f.input :email %>
<%= f.input :password %>
<%= f.input :password_confirmation %>
<%= f.button :submit, class: "btn-lg btn-primary" %>
<% end %>
И вот подтверждение для моей модели пользователя user.rb:
class User < ActiveRecord::Base
...
# Validations
validates :first_name, presence: true, length: { maximum: MAX_LENGTH_FIRST_NAME }
validates :last_name, presence: true, length: { maximum: MAX_LENGTH_LAST_NAME }
validates :alias, presence: true
validates :email, presence: true,
format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
has_secure_password
validates :password, length: { minimum: MIN_LENGTH_PASSWORD }
...
end
Теперь давайте скажем, что я удалить: псевдоним из user_params так:
private
def user_params
params.require(:user).permit(:first_name, :last_name,
:email, :password, :password_confirmation)
end
В моем понимании, если есть: псевдоним хэш (или любой другой хэш) в моем: пользователе Params, то я должен получить представление ActiveModel :: ForbiddenAttributesError.
Так что я пробовал удалить: псевдоним из user_params и , сохраняя псевдоним на пользовательской форме регистрации, чтобы у меня было: alias в user_params, чтобы поднять ошибку. Для того, чтобы держать его на моей форме и быть в состоянии представить его, я должен был прокомментировать мою проверку псевдонима в моей модели, чтобы выглядеть примерно так:
# validates :alias, presence: true
Но когда я создаю новый пользователь со всеми полями, включая псевдоним, Ошибка не появляется. Вместо этого я создаю нового пользователя в базе данных со всей информацией, но атрибут псевдонима nil независимо от того, что я ввел в форму.
Если бы кто-нибудь мог сказать мне, как иметь unpermitted params повысить исключение, пожалуйста, дайте мне знать.
Заранее спасибо.
* EDIT *
Причина, почему я отправил это было на самом деле в течение update_attributes().
Моя проблема заключалась в том, что я пытался обновить только 3 (из 5) атрибутов пользователя. Я попытался сделать сильные параметры, чтобы убедиться, что обновлены только эти 3 атрибута и ничего больше, но я думаю, что это неправильный способ сделать это.
Еще раз спасибо Брайану за разъяснение об ошибке и том, как она действительно поднята.
хороший первый вопрос – basher