【问题标题】:Can a Symbol in ruby create a Column in db table?ruby 中的符号可以在 db 表中创建列吗?
【发布时间】:2015-09-09 04:39:48
【问题描述】:

我有一个以姓名和电子邮件为列的人员表,

以下行是否会在表中创建一个“地址”列:

person = Person.create(:name => "August", :email => "august@gmail.com", :address => "Maker Street") 

【问题讨论】:

  • 您是否尝试在控制台中运行该命令?
  • 不!您需要在 migration 中添加 address 列。
  • @Pavan:在某些数据库中,它创建字段:)
  • @SergioTulentsev 很高兴知道哪些数据库:)
  • @Pavan mongodb,例如 :)

标签: ruby-on-rails ruby symbols


【解决方案1】:

Person 表中添加一个新列address

rails g migration AddAddressToPerson address:string

迁移数据库:

rake db:migrate

创建记录:

person = Person.create(:name => "August", :email => "august@gmail.com", :address => "Maker Street")

注意:您也可以使用rails g migration AddAddressToPerson address,因为string 是默认数据类型。

【讨论】:

  • 谢谢@rahulv。我还没有添加迁移列。对于类似的情况,我收到警告说 - 警告:无法批量分配受保护的属性:数字
  • 类似的场景是什么?
  • 类似的情况是我正在尝试更新数据库中不存在的列。
  • 不可能!为什么需要它?
【解决方案2】:

执行以下步骤 -

步骤 1:首先在 Person 表中创建新列地址,通过以下命令 -

rails g migration add_address_to_person address:string

第 2 步:迁移数据库

rake db:migrate

第 3 步:使用地址列创建人员 -

person = Person.create(:name => "August", :email => "august@gmail.com", :address => "Maker Street")

上述方法将在 Person 表的 Name、Email 和 Address 列中插入值。

【讨论】:

  • 生成器不会运行迁移。两者之间需要rake db:migrate 或类似。
  • 感谢 AmitSuroliya 和 mudasobwa 的回答!
  • 但是阿米特,对于类似的情况,我收到警告说 - 警告:无法批量分配受保护的属性:数字。你知道为什么我在更新上述场景的地址和其他场景的警告时出现未定义方法的错误吗?
  • @August.........你需要在params中允许number,比如params.require(:person).permit(:number, :name,:email ,:地址)
  • 谢谢,在另一种情况下,数据库中有来自 terms_1、..、terms_10 的十列。因此,在更新其中一条记录时,代码会尝试更新 terms_12,这是不可能的,并且会为一个用户提供错误,并为其他用户提供没有更新的警告。您知道为什么会发生这种情况吗?
猜你喜欢
  • 1970-01-01
  • 2021-09-11
  • 2023-02-11
  • 2019-04-20
  • 2013-02-23
  • 1970-01-01
  • 2016-03-01
  • 2015-03-16
  • 1970-01-01
相关资源
最近更新 更多