【问题标题】:Ruby on Rails Casing: Why Use Caps Here?Ruby on Rails 外壳:为什么在这里使用 Caps?
【发布时间】:2014-07-25 21:42:49
【问题描述】:

Rails 新手问题...

考虑以下代码:

class ArticlesController < ApplicationController
  def new
  end
  def create
    @article = Article.new(article_params)
    @article.save
    redirect_to @article
[...]

我不明白为什么Article.new 中的A 必须大写。所有其他对文章的引用都是小写的。为什么在这种情况下会有所不同?

【问题讨论】:

  • Ruby 约定:MyClassNameMY_CONSTANTmy_methodmy_local_variable@my_instance_variable

标签: ruby-on-rails ruby model-view-controller controller


【解决方案1】:

因为模型Article 是类。 class(s) 是 Ruby 中的常量。您正在创建模型(类)Article 的实例,然后将该实例保存到数据库中。

在 Ruby 中 class(s) 是常量,但 anonymous 不需要的类或模块总是需要是常量。如果需要,您可以将匿名类分配给常量。

Class::new

使用给定的超类(如果没有给定参数,则为 Object)创建一个新的匿名(未命名)类。 您可以通过将类对象分配给常量来为类命名

曾经,你将它分配给一个常量,它现在不是一个匿名类,因为它有名字。

klass = Class.new
klass.name # => nil

Klass = klass
Klass.name # => "Klass"

同样代表Module::new

由于您在 Rails 中,您应该检查一下2.1 Naming Conventions

默认情况下,Active Record 使用一些命名约定来找出模型和数据库表之间的映射应该如何创建。 Rails 将使您的类名复数以查找相应的数据库表。所以,对于一个类 Book,你应该有一个名为 books 的数据库表......

【讨论】:

  • 类通常是常量,但它们不一定是常量。 a = Class.new 很好。
  • @Arup Rakshit(好名字!):谢谢。这完美地回答了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多