我正在使用 Ruby on Rails tutorial并刚刚制作了一个具有三个属性的 Comment 模型。
rails generate model Comment commenter:string body:text post:references
它生成了一个包含 post
的 ActiveRecord 类,但不包含 commenter
和 body
。
class Comment < ActiveRecord::Base
belongs_to :post
end
为什么 Rails 不在数据库迁移脚本之外的任何地方正式定义非引用属性?
最佳答案
Rails 根据数据库模式动态加载属性,特别是列的名称及其类型。无需在模型中定义或声明它们。对于在生产环境中运行的应用程序,它会在加载时执行一次此操作。对于开发来说,它将根据每个请求重新加载它们,但仅在使用每个模型时加载它们。
不过,Rails 不会从数据库中推断出其他内容。例如,如果您要在 name
列上放置唯一索引,它不会自动将 validates_uniqueness_of :name
添加到您的模型中。当然,当您保存记录时,数据库仍然会强制执行此约束,如果名称字段包含重复值,则会引发异常。在这种情况下,建议两者都做。
关于ruby-on-rails - Rails 模型属性(property)位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4982254/