Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails控制台输出脏的/过时的数据_Ruby On Rails_Ruby_Rails Console - Fatal编程技术网

Ruby on rails Rails控制台输出脏的/过时的数据

Ruby on rails Rails控制台输出脏的/过时的数据,ruby-on-rails,ruby,rails-console,Ruby On Rails,Ruby,Rails Console,我正在跟踪,当我转到rails控制台--sandbox尝试创建用户时,输出完全过时了 我更新一个用户的属性,返回所有属性的用户和控制台输出nil。但是,如果我输出user.attribute,数据就在那里 第一次保存失败,因为用户必须有一个名称,尽管我在addind验证之前就遇到了这个问题 我错过了什么?我遵循了所有的指示,我正在做一些基本的事情。我正在执行以下命令: $ rails console --sandbox Loading development environment in san

我正在跟踪,当我转到
rails控制台--sandbox
尝试创建用户时,输出完全过时了

我更新一个用户的属性,返回所有属性的用户和控制台输出
nil
。但是,如果我输出
user.attribute
,数据就在那里

第一次保存失败,因为用户必须有一个名称,尽管我在addind验证之前就遇到了这个问题

我错过了什么?我遵循了所有的指示,我正在做一些基本的事情。我正在执行以下命令:

$ rails console --sandbox
Loading development environment in sandbox (Rails 4.0.2)
Any modifications you make will be rolled back on exit

2.1.0 :001 > user = User.new(name: "", email: "mhartl@example.com")
 => #<User id: nil, name: nil, email: nil, citizen_number: nil, created_at: nil, updated_at: nil> 
2.1.0 :002 > user.save
   (0.1ms)  SAVEPOINT active_record_1
   (0.2ms)  ROLLBACK TO SAVEPOINT active_record_1
 => false 
2.1.0 :003 > user.valid?
 => false 
2.1.0 :004 > user.name = "Bob"
 => "Bob" 
2.1.0 :005 > user.valid?
 => true 
2.1.0 :006 > user
 => #<User id: nil, name: nil, email: nil, citizen_number: nil, created_at: nil, updated_at: nil> 
2.1.0 :007 > user.save
   (0.2ms)  SAVEPOINT active_record_1
  SQL (6.2ms)  INSERT INTO "users" ("created_at", "updated_at") VALUES (?, ?)  [["created_at", Sat, 08 Feb 2014 19:15:37 UTC +00:00], ["updated_at", Sat, 08 Feb 2014 19:15:37 UTC +00:00]]
   (0.1ms)  RELEASE SAVEPOINT active_record_1
 => true 
2.1.0 :008 > user
 => #<User id: 1, name: nil, email: nil, citizen_number: nil, created_at: "2014-02-08 19:15:37", updated_at: "2014-02-08 19:15:37">
$rails控制台--沙箱
在沙箱中加载开发环境(Rails 4.0.2)
您所做的任何修改都将在退出时回滚
2.1.0:001>user=user.new(名称:,电子邮件:)mhartl@example.com")
=> # 
2.1.0:002>user.save
(0.1ms)保存点活动\u记录\u 1
(0.2ms)回滚到保存点活动记录1
=>错误
2.1.0:003>user.valid?
=>错误
2.1.0:004>user.name=“Bob”
=>“鲍勃”
2.1.0:005>user.valid?
=>正确
2.1.0:006>用户
=> # 
2.1.0:007>user.save
(0.2ms)保存点活动记录1
SQL(6.2ms)插入“用户”(“创建时间”,“更新时间”)值(?,)[“创建时间”,Sat,2014年2月8日19:15:37 UTC+00:00],“更新时间”,Sat,2014年2月8日19:15:37 UTC+00:00]]
(0.1ms)释放保存点活动\u记录\u 1
=>正确
2.1.0:008>用户
=> #

我的用户模型:

class User < ActiveRecord::Base

  attr_accessor :name, :email, :citizen_number

  VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
  VALID_CITIZEN_NUMBER_REGEX = /[1-9]\d{7,}/
  validates :name, presence: true, length: { maximum: 50 }
  validates :email, presence: true, format: { with: VALID_EMAIL_REGEX }, uniqueness: { case_sensitive: false }
  validates :citizen_number, presence: true, format: { with: VALID_CITIZEN_NUMBER_REGEX }, uniqueness: true

  before_save { lowercase_email() }

  def lowercase_email() 
    self.email = email.downcase
  end

end
class用户
使用


user.reload
应该为您的最新用户提供正确的属性,如中所述,它会从数据库中重新加载此对象的属性,因此您现在可以按预期获取对象属性,如果它们正确保存

Diogo,您的
用户.save
会遇到一些问题。第一次尝试
user.save
后,请尝试
user.errors
。这将为您提供一个包含阻止模型保存的错误的哈希


您很可能会在数据库方案中发现错误,因为
用户。valid?
返回
true

DiAlex,您是否有生成此错误的代码?我想试试。由于问题实际上发生在保存之前,但在“初始化”之后,我看不出重新加载或验证有什么关系

更新:根据测试和与您的反复交流,我认为您的问题与滥用
attr\u访问器
attr\u访问器
有关


尝试从属性访问器中删除
:公民号
。我试过了,你的代码开始工作(通过了所有测试),控制台也开始输出正确的值。

你试过没有沙盒模式吗?也许它在某种程度上限制了写作

rails console

这会产生一个错误
ActiveRecord::RecordNotFound:无法找到没有ID的用户,因为该用户未保存。控制台应该(我猜)在保存用户之前就输出正确的数据。那么您可能没有保存用户。我继续教程并忽略了这个问题,因此最新的源代码有更多的验证。尽管如此,这里应该有一个非常稳定的版本:我也是一个n00b,所以是的:PDiAlex-我克隆了建模用户分支(其他分支没有用户模型)。事实上,无论有没有验证,我都会记录到同样的错误和奇怪。当我保存时,它保存了,但数据仍然很奇怪。在这里查看结果()我还创建了一个新的应用程序,并创建了一个用户模型,它实现了您所期望的:()现在我们必须找出您的应用程序与默认应用程序之间的区别。我怀疑我能做到,但我会试试。好的,如果我在你的用户模型中,在你的回购中,删除了attr_访问器,它会工作的。我们将进一步研究它,但它可能与整个白名单相关,而且,我想你(和我)没有注意到你可能想要attr_访问,而不是attr_访问器(虽然可能不是密码,我想你可能不想要这些,因为这些东西的安全性正在进入控制器)。请参见()和()