validate and update single attribute rails

后端 未结 5 1464
旧巷少年郎
旧巷少年郎 2021-02-08 22:55

I have the following in my user model

attr_accessible :avatar, :email

validates_presence_of :email
has_attached_file :avatar # paperclip

validates_attachment_s         


        
5条回答
  •  离开以前
    2021-02-08 23:14

    You could validate the attribute by hand and use update_attribute, that skips validation. If you add this to your User:

    def self.valid_attribute?(attr, value)
      mock = self.new(attr => value)
      if mock.valid?
        true
      else
        !mock.errors.has_key?(attr)
      end
    end
    

    And then update the attribute thusly:

    if(!User.valid_attribute?('avatar', params[:user][:avatar])
        # Complain or whatever.
    end
    @user.update_attribute('avatar', params[:user][:avatar])
    

    You should get your single attribute updated while only (manually) validating that attribute.

    If you look at how Milan Novota's valid_attribute? works, you'll see that it performs the validations and then checks to see if the specific attr had issues; it doesn't matter if any of the other validations failed as valid_attribute? only looks at the validation failures for the attribute that you're interested in.

    If you're going to be doing a lot of this stuff then you could add a method to User:

    def update_just_this_one(attr, value)
        raise "Bad #{attr}" if(!User.valid_attribute?(attr, value))
        self.update_attribute(attr, value)
    end
    

    and use that to update your single attribute.

提交回复
热议问题