【问题标题】:What is the difference between an attribute and a column?属性和列有什么区别?
【发布时间】:2017-07-07 09:48:18
【问题描述】:

“属性”和“列”这两个术语似乎可以互换使用……但我的猜测是,列是盒子,属性是盒子里的东西。

【问题讨论】:

  • attribute 用于 model,column 用于 table
  • 从数据库的角度来看,column 是整个结果集,attribute 可以是列名。例如:select id from some_table;。在这里,column = list of ids 和 attribute = id

标签: ruby-on-rails ruby database


【解决方案1】:

“列”是数据库表中的列,而“属性”是对象的外部可见方面。

“属性”用于模型,“列”用于数据库中的表。

这是一个模型的架构:

create_table "retreats", force: :cascade do |t|
  t.string "title"
  t.string "tagline"
  t.datetime "created_at", null: false
  t.datetime "updated_at", null: false
end

这里的“retreats”是数据库中的一个表,包含以下列“title”、“tagline”、“created_at”、“updated_at”。

此表有一个模型 Retreat,它具有属性“title”、“tagline”、“created_at”和“updated_at”。您可以在this 页面上获取更多关于属性的信息。

它们很相似,但由于它们的上下文而不同。

编辑 1:

数据库表中的一行由 Rails 中的对象映射。该对象的属性值是该行中列的值。

作为vojic points out,一列包含所有对象的属性值。

【讨论】:

  • 我要补充一点,“列”也可以指表中的完整属性实例集。您SELECT 一个列,然后查询为每个结果行返回该列的值(一个属性)。
【解决方案2】:

ActiveModel 提供了一个 attributes API 以方便使用,它将实例变量映射到哈希以方便使用。 https://blog.metova.com/rails-5-attributes-api

ActiveRecord 扩展了 ActiveModel 以自动将 columns 映射到 attributes,并且您仍然可以定义没有列的自定义属性,例如这个很好的示例。 http://api.rubyonrails.org/classes/ActiveRecord/Attributes/ClassMethods.html

所以在标准的 Rails 应用程序中,ActiveRecord 模型会自动将列转换为属性,您仍然可以添加自己的。您还可以拥有额外的 ActiveModel,它们有自己的持久性(或不)使用相同属性 API 的机制,因此标准 Rails 组件可以假装它像 ActiveRecord。

【讨论】:

    【解决方案3】:

    我希望这会有所帮助:

    来自: Peter Bruce、Andrew Bruce、Peter Gedeck - 使用 R 和 Python-O'Reilly Media 为数据科学家提供 50 多个基本概念的实用统计(2020 年)

    【讨论】:

      猜你喜欢
      • 2011-11-14
      • 2012-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-20
      • 2016-04-29
      • 2018-04-28
      相关资源
      最近更新 更多