【发布时间】:2011-11-01 12:25:43
【问题描述】:
我有一个用于更新某些属性的编辑表单。但它试图编辑所有属性,因此我有验证错误。
我的表单(编辑视图)
#person_info.fl_l
- if @user.errors.any?
.error_explanation
%h2 Form is invalid
%ul
-for message in @user.errors.full_messages
%li= message
=form_for @user do |f|
%p
Birthday:
%br
= f.date_select(:birthday,:start_year => 1940)
%p
Name:
%br
= f.text_field :name, :value=>@user.name
%p
Surname:
%br
= f.text_field :surname, :value=>@user.surname
%p
Nickname:
%br
= f.text_field :nickname, :value=>@user.surname
%p
About Myself:
%br
= f.text_area :about_myself, :value=>@user.about_myself
%p
= f.submit "Update"
我的更新和编辑操作:
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
if @user.update_attributes(params[:user])
redirect_to @user
else
render 'edit'
end
end
当我提交表单时,它会输出验证错误,例如:“密码不能为空”
那么,如何只更新部分属性,而不是全部?我不想更新密码。
我的用户模型
class User < ActiveRecord::Base
has_many :posts
has_many :sent_messages, :class_name => "Message", :foreign_key => "sender_id"
has_many :received_messages, :class_name => "Message", :foreign_key => "receiver_id"
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :name, :presence => true,
:length => {:maximum => 50}
validates :email, :presence => true,
:format => {:with => email_regex},
:uniqueness => {:case_sensitive => false}
validates :password, :presence => true,
:confirmation => true,
:length => {:within => 6..40}
before_create { generate_token(:auth_token) }
def send_password_reset
generate_token(:password_reset_token)
self.password_reset_sent_at = Time.zone.now
save!
UserMailer.password_reset(self).deliver
end
def generate_token(column)
begin
self[column] = SecureRandom.urlsafe_base64
end while User.exists?(column => self[column])
end
end
【问题讨论】:
-
你能解决这个问题吗?我有完全相同的问题:S
标签: ruby-on-rails ruby ruby-on-rails-3.1