【问题标题】:How does one add an attribute to a model?如何为模型添加属性?
【发布时间】:2011-09-16 10:08:58
【问题描述】:

在 Rails 中,我生成了一个带有两个字符串的模型,并希望添加更多。我该怎么做呢?

【问题讨论】:

标签: ruby-on-rails attributes model attr


【解决方案1】:

Active Record 将您的表列映射到模型中的属性,因此您无需告诉 rails 您需要更多,您要做的就是创建更多列,rails 会检测它们,属性将是自动添加。

您可以通过migrations向您的表格添加更多列:

rails generate migration AddNewColumnToMyTable column_name:column_type(string by default)

例子:

rails generate migration AddDataToPosts views:integer clicks:integer last_reviewed_at:datetime 

这将生成一个文件:

db/2017.....rb

如果需要,打开并添加修改:

self.up
  #add_column :tablename, :column_name, :column_type
  add_column :posts, views, :integer
  add_column :posts, clicks, :integer, default: 0
end

希望这会有所帮助。

【讨论】:

  • 假设我创建了一个 Rails 应用程序并有一个名为 User_credential 的模型。目前有:姓名和电话号码。部署后,老板突然意识到他要在模型中添加地址。他要求我创建一个为模型添加属性的表单。这在 Rails 中可行吗?
  • @BKSpureon 一种选择是使用序列化字段并将自定义属性存储在其中。另请查看api.rubyonrails.org/classes/ActiveRecord/Store.html,它可以让您将自定义属性视为常规属性。
【解决方案2】:

是的,@JCorcuera 的解决方案是适用的,但我建议向 Rails 应用更多信息来满足我们的要求。试试这个方法:

rails generate migration add_columnname_to_tablename columnname:datatype

例如:

rails generate migration add_password_to_users password:string

【讨论】:

  • 这绝对是一个更好的方法,只要确保你的名字完全正确就可以了。
  • "你得到的名字完全适合它的工作":我想补充一点,add_columnname_to_tablename 有一个含义,并且需要有意义。这似乎很明显,但我没有马上想到它,来自另一个迁移名称从不相关的迁移工具。
【解决方案3】:

如果您使用的是 Rails 4.x,您现在可以生成带有引用的迁移,如下所示:

rails 生成迁移 AddUserRefToProducts user:references

就像你在rails guides看到的一样

【讨论】:

    【解决方案4】:

    你可以做的更简单:

    rails g migration add_something_to_model something:string something_else:integer
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-18
      • 2020-03-16
      • 1970-01-01
      • 2013-04-14
      相关资源
      最近更新 更多