我的用户模型有
validates :password, :presence => true,
:confirmation => true,
:length => {:within => 6..40}我在用户控制器上的更新操作是
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
flash[:success] = "Profile updated."
redirect_to @user
else
@title = "Edit user"
render 'edit'
end
end我的编辑视图是
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', :object => @user.errors%>
<div class="field">
<%= f.label :name %><br />
<%= f.text_field :name %>
</div>
<div class="field">
<%= f.label :email %><br />
<%= f.text_field :email %>
</div>
<div class="field">
<%= f.label :password %> <br />
<%= f.password_field :password %>
</div>
<div class="field">
<%= f.label :password_confirmation, "Confirmation" %> <br />
<%= f.password_field :password_confirmation %>
</div>
<div class="actions">
<%= f.submit "Update" %>
</div>问题是我只想更新模型的特定属性,而不是每次都输入密码。如果我没有输入密码(和确认),我会得到验证错误)
我该如何解决这种情况?
发布于 2012-02-15 06:12:42
尝试下一个验证规则
验证:password,:presence => true,:if => lambda { new_record?|| !password.nil?}
发布于 2012-01-07 18:30:32
您可以使用attr_protected从update_attributes中排除某些字段。请参阅doc。一种更好的方法是使用attr_accessible将可以通过批量分配更新的属性列入白名单。
https://stackoverflow.com/questions/8768880
复制相似问题