属性和列有什么区别?

时间:2017-07-07 09:48:18

标签: ruby-on-rails ruby database

两个术语"属性"和"列"似乎可以互换使用......但我的猜测是列是框,属性是框中的内容。

2 个答案:

答案 0 :(得分:4)

A"专栏"是数据库表中的列,而"属性是"是对象的外部可见面。

"属性"是一个模型和一个"列"用于数据库中的表。

这是模型的架构:

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

在这里"撤退"是数据库中的表格,其中包含以下列" title","标语"," created_at"," updated_at"。

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

它们很相似,但由于它们的背景,它们是不同的。

编辑1:

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

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

答案 1 :(得分:0)

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,这些ActiveModel具有使用相同属性API的持久性(或非持久性)机制,因此标准Rails组件可以伪装成ActiveRecord。