不提供validates presence字段的Rails更新对象:true



我试图通过表单更新用户对象。但是,我不希望允许更改用户名。表格上没有这个字段。当我提交表单时,它给了我一个错误,我不能把用户名确认留空。这是我的控制器:

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跳过验证。

最新更新