Rails 5.0.0.1:无法从控制台创建类实例?

时间:2016-09-17 17:12:22

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-4

我正在关注2012年6月制作的视频教程。当时Ruby版本1.9.3和Rails版本为3。现在我正在尝试Rails 5.0.0.1中的代码示例。

我们知道现在必须在strong parameters行动中使用create。当使用控制台创建类的实例对象时,这也适用吗?

在练习中,模型用户由rails g scaffold user name movie生成。下一条指令是rake db:migrate(当然),然后进入控制台并创建用户记录。一切顺利;记录创建并保存所有具有值的字段。

但现在我的问题出现的部分是:下一个命令是:

rails g scaffold car user:belongs_to condition year:integer

行;再次rake db:migrate,然后打开控制台。当我想要创建汽车记录时,就会发生这种情况:

>> car = Car.create(year: 2003, condition: 'ok')
   (0.2ms)  begin transaction
   (0.1ms)  rollback transaction
=> #<Car id: nil, user_id: nil, condition: "ok", year: 2003, created_at: nil, updated_at: nil>

没有创建记录!我怀疑它与Rails 4和5中的strong parameters有关吗?​​

最后,我的问题是:

  • 出了什么问题?还有另一种方法,使用控制台来创建?
  • 这是因为Car模型的关系:belongs_to :user
  • 我知道有些宝石会模仿&#39;在引入强参数之前的状态,但我宁愿不使用这些;感觉好像在作弊!

1 个答案:

答案 0 :(得分:2)

Rails 5默认需要belongs_to个关联,因为host names

您可以使用belongs_to :user, optional: true指定该字段是可选的。

此外,如果您的模型无法保存,那么查看其errors对象通常会很有帮助。

您可以通过执行puts car.errors之类的操作来完成此操作。

强参数不会影响您在控制台中执行的任何操作。他们的全部意义在于将质量分配保护从模型中转移到控制器中。