【问题标题】:Ruby on Rails - Model definition?Ruby on Rails - 模型定义?
【发布时间】:2015-12-10 16:16:10
【问题描述】:

我目前正在学习 Ruby on Rails,但有一点我不明白为什么会这样,以及如何。

假设我们有一个具有这种结构的users 表:

+-------+---------------+
| id    | int(11)       |
| name  | varchar(255)  |
+-------+---------------+

为什么模型文件只是这样:

class User < ActiveRecord::Model
end

getter/setter 都没有属性。

  • 效果如何?
  • 为什么会这样?
  • 我需要attr_accessor :id, :username吗?

我在 PHP 和 C# 方面有丰富的背景,但我从未见过。我敢打赌,我不是唯一一个这样问自己的人,如果它是重复的,很抱歉(我搜索过但什么也没找到)!

【问题讨论】:

    标签: ruby-on-rails ruby oop activerecord


    【解决方案1】:

    它或多或少像这样工作: 第一次调用您的用户类时,它会查找名称为users 的表。如果存在,它将加载该表中的所有字段,“自动”为您创建“setter”和“getter”。

    例如,您将拥有开箱即用的:

    user = User.new
    user.name
    user.name=
    user.name? # which will tell you if this field is nil, or not.
    

    诸如此类的东西

    User.find_by_name('name')
    

    此外,您可以在控制台中“检查”您的课程,如下所示:

    rails c # or irb, but I don't know how much you'd have to require then ...
    
    User # and just hit enter
    

    它会产生类似的东西:

    User(id: number, name: string)
    

    【讨论】:

    • 好的,但是我猜这不是EXPLAIN查询造成的瓶颈吗?
    • 它不应该创建解释。如果是这样,仅通过查找表的字段,系统内可能存在一些非常损坏/错误配置/缓慢的连接。还是你的意思是别的?此外,它通常只执行一次...
    • 我猜它会在应用程序初始化或开发模式下的每个请求时进行此查找。但是它如何在没有 EXPLAIN 或其他列出表结构的情况下查找表中的字段?
    • 我认为 Rails 会在应用程序服务器启动时加载您的数据库模式。我相信这将为它提供表格结构。查看 Rails 项目中的 db 文件夹。
    • 您可能是指 DESCRIBE?我刚刚添加了一个解释,说明如何“洞察”您的模型。
    猜你喜欢
    • 2020-04-23
    • 2015-06-14
    • 1970-01-01
    • 2013-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多