我最近被要求参加一个网络服务项目。他们使用Ruby on Rails,我发现它很难学习。
问题是Ruby是一种动态编程语言,隐藏了类型信息。我知道这是一种编程方式。但是,我不明白这种类型隐藏扩展到文档的原因。
我无法在the rails api documentation中找到有关方法返回类型或参数类型的任何信息。
一个例子。在进行迁移时,我们使用create_table
方法。
create_table :post do |t|
t.integer :user_id
t.string :title
t.string :text
t.string :image
t.integer :category_id
t.date :date_available
t.timestamps
end
有t
。我不想让你告诉我t
是什么。我想知道在哪里可以找到它是什么。我想知道它有哪些方法,string
,integer
和date
来自哪里。
现在我必须花时间逆向工程rails代码并在Internet上找到含糊不清的教程。是否有一个地方可以找到所有rails类的返回类型和参数类型。和常数。还有一切。
答案 0 :(得分:1)
create_table
只是一种方法。您可以在任何位置找到有关Rails自动生成的方法级文档的文档。如:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/create_table
|t|
是一个块参数,在您传递给create_table
方法的块中,create_table
方法将使用一个参数调用。如果您不了解块如何在ruby中工作,那么如果您阅读它,您肯定会有更轻松的时间。它并不特定于Rails,它是ruby语言的一部分。
那么create_method
将什么类型的对象传递给块参数?您可以在create_method
文档中找到您记录的位置,但实际上它似乎并没有告诉您。其他采用块的方法可能更有可能被记录下来,以准确地告诉你它们将通过什么(如果它不明显),但它有点烦人,这里没有记录。
使用这个特定的方法,它是一种实现细节,|t|
是什么类 - 重要的是你可以用它做什么。这实际上是一般的“鸭子打字”的红宝石哲学的关键,重要的是你可以用一个对象做什么,而不是它是什么类。但我同意知道它是什么类 - 即使它基本上是一个你永远不会实例化的内部类,就像在这种情况下一样 - 使得查找文档更容易解释你可以用它做什么。如果我正在编写create_method
的文档,我会记录下来。但我不是。
我很抱歉,我们只能回答您的问题,而不是更改Rails文档或性质或ruby语言或ruby社区的常见做法更像您或我可能更喜欢。
在这种情况下,人们会根据上面针对|t|
或Rails migration guide的文档中的create_method
了解您可以执行的操作。 Rails指南非常适合全面了解Rails各种组件的工作原理。但他们确实假设已经将ruby视为一种语言的读者,并且熟悉网络和编程。
尽管如此,我们很幸运,Rails迁移指南确实告诉我们该对象是什么......
有关各个方法的更多详细信息和示例,请查看API文档。特别是ActiveRecord :: ConnectionAdapters :: SchemaStatements(提供更改,上下方法中可用的方法),ActiveRecord :: ConnectionAdapters :: TableDefinition(提供create_table生成的对象上可用的方法)和ActiveRecord的文档:: ConnectionAdapters :: Table(提供change_table产生的对象上可用的方法)。
这就是|t|
是什么,一个ActiveRecord :: ConnectionAdapters :: TableDefinition。 (也许你想向Rails提交一个拉取请求,将这些信息添加到create_table
等自己的方法级文档中)
ActiveRecord::ConnectionAdapters::TableDefinition
在这里有一小部分自动生成的文档:http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/TableDefinition.html。另外,我猜每个单独的数据库类型(mysql vs postgres等)都有ActiveRecord::ConnectionAdapters::TableDefinition
的不同具体实现
但实际上并没有那么多。正如我所说,在实践中,大多数开发人员并不需要了解更多信息,而不是像其他地方所记录的那样。但我确实理解你想知道它到底是什么以及它做了什么。潜入源代码是大多数Rails开发人员此时会做的事情(或者之前已经完成确定对象是什么类,可能使用调试器)。 大多数自动生成的ruby文档,就像我们一直在查看的文档一样,在每个方法上都包含一个链接,用于查看该方法的源代码,与文档内联。我经常使用它,有时候来源很容易回答我用英语书面文档没有的任何问题(有时它没有)。
我知道你不喜欢那种情况,对不起,我无法在SO回答中为你改变现实!
答案 1 :(得分:0)
查看Rails的API停靠栏。你可以找到api的源代码和定义。
对于" create_table"的具体情况;方法。看看http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/create_table。它解释说这个方法需要一个块,返回SQL。