【问题标题】:Ruby/Rails - Models Named with Two Words (Naming Convention Issues)Ruby/Rails - 用两个词命名的模型(命名约定问题)
【发布时间】:2011-02-04 00:25:58
【问题描述】:

这确实是一个关于命名约定的问题。

我有一个名为PromotedEvents 的模型

文件名为promotion_events.rb

我创建了表格:

create_table :promoted_events do |t|

现在我在创建任何东西时遇到问题,所以我想知道使用带有两个单词的模型是否有问题

我在控制台中尝试过

a = PromotedEvents.new

a = Promoted_Event.new

a = promoted_event.new

并不断收到nameerror : uninitialized constant 错误

有什么想法吗?

【问题讨论】:

    标签: ruby-on-rails ruby naming-conventions


    【解决方案1】:

    你的班级应该是单一的。

    在文件promoted_event.rb中将其命名为PromotedEvent

    a = PromotedEvent.new
    

    【讨论】:

    • 创建2字模型的终端命令是什么?是rails generate model Model_Name 还是其他组合?这两个词都应该大写吗?生成模型时要加下划线吗?
    • 我认为您可以使用ModelNamemodel_name,并且会发生正确的魔法。但是Model_Name 不正确(驼峰式或下划线,不能同时使用两者)。把它想象成创建模型类,所以它是单数的,因为它必须匹配类名。
    • 是的,@AlexWayne 是对的。根据model generator descriptionCamelCaseunder_score 的用法都是正确的。
    【解决方案2】:

    型号名称是单数和驼峰式,就像pe = PromotedEvent.new()

    文件应该是promoted_event.rb

    控制器是复数形式

    PromotedEventsController

    常量是ALL_CAPS

    本地人是separated_by_underscores_and_lowercase

    表名是复数 'SELECT * FROMpromotion_events`

    【讨论】:

    • 模型中的属性怎么样。即 rails g model PromotedEvent name_of_event:string --------------> 还是应该是 NameOfEvent:string ?这里有什么语法的任何想法?
    • 它应该只是名称:字符串,但如果您需要两个或多个单词,它们是小写并用下划线分隔,即promotion_code:integer
    【解决方案3】:

    如果有帮助,我总是这样想:

    模型名称是单数的,因为它代表一个单一的、特定的事物。因此,PromotedEvent 是具有名称、日期等的特定推广事件。

    另一方面,表名是复数。这是因为该表存储了这些单数项的集合。所以,promotion_events。

    在 Rails 中,文件名主要是一个约定问题,因为 ruby​​ 在这方面有相当宽松的规则,但通常是class_name.rbThis page 可能会帮助您更好地了解在哪里使用了哪些约定以及 Ruby 与 Rails 的具体情况。

    【讨论】:

      【解决方案4】:

      如果你像我一样是一个极端的 rails n00b,那么你会想要记住为你新创建的表创建一个类定义并将其放在 app/models.xml 中。

      会是这样的

      class LargeCat < ActiveRecord::Base
          belongs_to :zoo
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-07-07
        • 1970-01-01
        • 1970-01-01
        • 2011-09-01
        • 2012-04-27
        相关资源
        最近更新 更多