我是rails的新手并且有一个简单的问题。
我有一个铁轨模型:
class User < ActiveRecord::Base
attr_accessor :password
attr_accessible :name, :email, :password, :password_confirmation, :description
email_regex = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, :presence => true
validates :name, :presence => true
validates :password, :presence => true
...
end
在此模型的更新页面上,我有一个表格,其中包含电子邮件的文本框和名称的文本框。
在我的控制器中我有以下更新方法:
def update
@user = User.find(params[:id])
respond_to do |format|
if @user.update_attributes(:name => params[:name], :email => params[:email])
flash[:success] = "Profile updated"
format.html { redirect_to(@user, :notice => 'User was successfully updated.') }
format.xml { head :ok }
else
@title = "Edit user"
format.html { render :action => "edit" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
这是一个奇怪的错误消息失败:
undefined method `downcase' for nil:NilClass
谁能告诉我这里哪里出错了?我确定我做的事情很糟糕,但无法弄清楚它是什么......
答案 0 :(得分:2)
如果插入某种辅助方法,则可以有条件地触发验证。这通常适用于多阶段条目或部分更新:
class User < ActiveRecord::Base
validates :password,
:presence => { :if => :password_required? }
protected
def password_required?
self.new_record?
end
end
我真的希望你不是将密码保存为纯文本。这是一个巨大的责任。通常password
和password_confirmation
是临时attr_accessor
方法,稍后进行哈希并保存。
答案 1 :(得分:1)
以下行错误
@user.update_attributes(params[:name], :email => params[:email])
update_attributes想要一个哈希值。
@user.update_attributes(:name => params[:name], :email => params[:email])
此外,您应该在视图中使用form_for
帮助器,以便将所有用户属性分组为params[:user]
哈希。