@user.update_languages(params[:language][:language1], 
                       params[:language][:language2], 
                       params[:language][:language3])
lang_errors = @user.errors
logger.debug "--------------------LANG_ERRORS----------101-------------" 
                + lang_errors.full_messages.inspect

if params[:user]
  @user.state = params[:user][:state]
  success = success & @user.save
end
logger.debug "--------------------LANG_ERRORS-------------102----------" 
                + lang_errors.full_messages.inspect

if lang_errors.full_messages.empty?

@user对象向update_lanugages方法中的lang_errors变量添加错误.

虽然我试图做的更多的是黑客(这似乎不起作用).我想理解为什么变量值被洗掉了.我理解pass by reference,所以我想知道如何将值保存在该变量中而不被冲掉.

推荐答案

用传统术语来说,Ruby is strictly pass-by-value.但这不是你真正想要的.

Ruby没有任何纯的、非引用值的概念,因此您当然不能将其传递给方法.变量总是对对象的引用.为了得到一个不会从你下面变出来的对象,你需要复制或克隆你所传递的对象,从而得到一个其他人都没有引用的对象.(尽管这并不是绝对可靠的——两种标准的克隆方法都是浅拷贝,因此克隆的实例变量仍然指向与原始对象相同的对象.如果IVAR引用的对象发生变异,这仍然会显示在副本中,因为它引用的是相同的对象.)

Ruby-on-rails相关问答推荐

form_with正在try 用错误的路径生成操作

Heroku、Selenium、Chome和Chromedriver的复杂问题(抱歉,无法简单描述,请阅读详细信息)

在 Ruby on Rails html.erb 文件中循环

为特定操作使用布局

rails select标签,预先 Select 了多个值

File.open,写入和保存?

耙路由错误缺少:路由定义上的操作键

OpenSSL::SSL::SSLError: SSL_connect SYSCALL returned=5 errno=0 state=SSLv3 read server hello A

Ruby 元素是否存在于数组中

如何按值按降序对哈希进行排序并在 ruby​​ 中输出哈希?

Ruby on Rails:调试 rake 任务

使用 AJAX 向 Rails 发送 Authenticity Token 的正确方法

在 Ruby on Rails 中循环对象属性

如何对这个哈希数组进行分组?

通过 Ruby 或 Rails 的 LDAP

在 rails 3 中批量插入

我是否必须手动卸载所有依赖的 gem?

在 Rails 3 中设置会话超时

如何在 Ruby 类/模块命名空间中翻译模型?

简单的 rails rake 任务拒绝运行并出现错误不知道如何构建任务,为什么?