Rails更新对象而不提供带有validates的字段:true

时间:2014-03-25 18:28:46

标签: ruby-on-rails validation

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

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

如何更新我在更新操作中允许的参数而不触及其他参数?

编辑:验证方法

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 })

2 个答案:

答案 0 :(得分:2)

假设您在username_confirmation模型中对CommunityPartner进行了验证。

对该验证使用on: :create选项。因此,只有在CommunityPartner记录创建和not while updating(您不会通过username_confirmation)时才会检查该验证。

例如:

class CommunityPartner < ActiveRecord::Base
  validates :username_confirmation, presence: true, on: :create
end

答案 1 :(得分:0)

您可以使用update_all帮助程序而不是update_attributes跳过验证。