Я хочу установить значение по умолчанию для одного из моих разрешенных параметров.Как установить значение по умолчанию для params.permit
я пытался сделать, как они сказали http://api.rubyonrails.org/classes/ActionController/Parameters.html
class UsersController < ApplicationController
def new
@user = User.new
end
def show
@user = current_user
end
def create
user_params = ActionController::Parameters.new({
user: {
avatar_link: '/assets/avatar-placeholder.png'
}
})
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
redirect_to user_path(current_user)
else
redirect_to new_user_path
end
end
private
def user_params
params.require(:user).permit(:name, :username, :email, :password, :password_confirmation, :avatar_link)
end
end
Но это, кажется, не работает - я получаю ActiveModel::ForbiddenAttributesError (ActiveModel::ForbiddenAttributesError)
из-за этой части:
user_params = ActionController::Parameters.new({
user: {
avatar_link: '/assets/avatar-placeholder.png'
}
})
Как я должен установить значение по умолчанию для моего params
?
UPD: Я пытался использовать @xlembouras решение, но теперь у меня есть rollback transaction
def user_params
defaults = {avatar_link: '/assets/avatar-placeholder.png'}
params.require(:user).permit(:name, :username, :email, :password, :password_confirmation, :avatar_link).reverse_merge!(defaults)
puts params
end
модели/user.rb
class User < ActiveRecord::Base
before_save { self.email = email.downcase }
has_secure_password
validates_confirmation_of :password
has_many :projects
validates :name, presence: true, length: {maximum: 50}
validates :username, presence: true, uniqueness: { case_sensitive: false }, length: {maximum: 50}
VALID_EMAIL_REGEX = /\A[\w+\-.][email protected][a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: {with: VALID_EMAIL_REGEX}, uniqueness: { case_sensitive: false }
validates :password, presence: true, length: {minimum: 6}
validates :password_confirmation, presence: true
end
что такое e rrors, которые вызывают откат? вы также должны предоставить часть проверки 'User' – xlembouras
@xlembouras. Это на самом деле просто« откат транзакции »на консоли, не более того. – Viktor
Откат является результатом ошибки, либо в модели, либо на вашем дБ. вы можете добавить '@ user.valid ?; ставит @ user.errors' перед сохранением или устанавливает отладчик и видит, что происходит. – xlembouras