2013-03-26 64 views
0

我从移动的Rails 2.2.2应用到Rails 3.我有一个用来更新用户的信息,这是在梁2全功能,但在Rails的休息形式3的Rails 3和update_attributes方法

当提交表单时,一个方法调用时造成的用户对象,然后试图做这样的更新:

if @user.update_attributes params[:user] ## line 126 

然后控制器抛出此异常:

undefined method `update_attributes' for #<ActiveRecord::Relation:0xacfc178> 

in: app/controllers/admin_controller.rb:126:in `save_user' 

所以升Rails 3中的ActiveRecord等类似的对象正在返回不同类型的对象?一个不会继承update_attributes?我该如何解决?

这里是有问题的充分的控制器方法:

def save_user 
@needs_password_gen = "YES" 
@user = B2bUser.where("id = ?",params[:id]) 

@needsAPICredentials = false 

##### Make sure thay gave us an email address 
if !params[:user][:email] || !validEmailAddress(params[:user][:email].to_s) 
    flash[:warning] = "Valid email address is required." 
    redirect_to :controller => "admin/edit_user/#{@user.id}" and return 
end 

@user.first.update_attributes params[:user] 

THANKS

+1

可以粘贴代码从控制器?而不是单线。 – 2013-03-26 12:35:04

+1

'update_attributes'使用单个记录而不是集合,@user是如何定义的? – siekfried 2013-03-26 12:41:02

+0

try @ user.first.update_attributes params [:user] – 2013-03-26 12:47:53

回答

1

看起来你@user对象可以是一个数组。您可能正在使用:在哪里查询并忘记将其从数组中弹出。试试这个:

@user.first.update_attributes params[:user] 
+0

感谢您的建议。它返回这个:不能批量分配受保护的属性:名称,公司,电子邮件,用户名,密码,api_password,api_username,send_email_reminders,is_admin我更新了我的问题,使它现在包含发生错误的控制器方法 – Slinky 2013-03-26 17:00:52

+0

确保您的哈希中的所有字段都在您的用户模型中用attr_accessible打开。您也可以在选定的字段上编辑传入哈希和update_attribute。 – jbearden 2013-03-26 19:49:26