@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相关问答推荐

无法加载此类文件 -- mysql2/mysql2

将 Rails 升级到 6,出现 Blocked host 错误

Rails 5:重命名表迁移

Rails 无法将未经许可的参数转换为哈希

如何为日期时间列设置默认值以记录迁移中的创建时间?

slick.js 中的错误:“未捕获的 TypeError:无法读取属性 'add' of null”

如何更改 Heroku 应用程序的 DATABASE_URL

Rails: Sprockets::Rails::Helper::AssetNotPrecompiled 在开发中

Rails:发出 POST 请求时无法验证 CSRF 令牌的真实性

Sidekiq 在 docker-compose 上的 127.0.0.1:6379 (Errno::ECONNREFUSED) 上连接到 Redis 时出错

如何在 Ubuntu 上使用 gem 安装 Rails

'rails generate' 命令在try 创建模型时挂起

使用omniauth 和Facebook 对用户进行身份验证以获取rails API?

在 Rails 4.1 中,如何通过枚举符号查找记录?

如何使用 rspec 测试 ActionMailer Deliver_later

如何从 Rails 中的枚举中获取整数值?

rails 4中secret_key_base的用途是什么

Rails - 用 2 个字段查找?

使用 Capybara,如何切换到带有“_blank”目标的链接的新窗口?

FactoryGirl + Faker - 为数据库种子数据中的每个对象生成相同的数据