我试图通过表单更新用户对象。但是,我不希望允许更改用户名。表格上没有这个字段。当我提交表单时,它给了我一个错误,我不能把用户名确认留空。这是我的控制器:
def update
@partner = CommunityPartner.find(params[:id])
if @partner.update_attributes(allowed_update_params)
else
render('edit')
end
end
def allowed_create_params
params.require(:community_partner).permit(:name, :username, :display_email,
:username_confirmation,
:contact_method, :password,
:password_confirmation,
:phone_number, :address,
:description, :tags_string)
end
def allowed_update_params
params.permit!(:name) if params[:name]
params.permit!(:display_email) if params[:display_email]
params.permit!(:contact_method) if params[:contact_method]
params.permit!(:phone_number) if params[:phone_number]
params.permit!(:address) if params[:address]
params.permit!(:description) if params[:description]
params.permit!(:tags_string) if params[:tags_string]
end
我怎么能只更新我允许在更新操作的参数,而不触及其他?
EDIT: validation methods
validates(:name, presence: { on: :create })
validates(:username, presence: { on: :create }, confirmation: { on: :create }, uniqueness: true)
validates(:contact_method, presence: { on: :create })
validates(:username_confirmation, presence: { on: :create })
validates(:display_email, format: { with: VALID_EMAIL })
validates(:address, presence: { on: :create })
validates(:phone_number, presence: { on: :create })
validates(:description, presence: { on: :create })
假设您在CommunityPartner
模型中对username_confirmation
进行了验证
在验证中使用on: :create
选项。因此,该验证将仅在CommunityPartner
记录创建和not while updating
(您没有通过username_confirmation
)时进行检查。
class CommunityPartner < ActiveRecord::Base
validates :username_confirmation, presence: true, on: :create
end
您可以使用update_all
helper而不是update_attributes
跳过验证。