Rails 学习 Rails 碰到了找不到文档的问题..或者是我不会找

ruohanc · 2012年04月26日 · 最后由 zlx_star 回复于 2012年07月28日 · 4580 次阅读

最近才开始学 RoR, 一边做毕设一边学..越来越发现读不懂 Rails 的 API doc 了。

我现在的学习材料基本就是下面几个,感觉有很多内容找不到

  1. RailsGuides
  2. Rails API Doc
  3. Railscasts

比如吧,我现在在读 GitlabHQ 的代码,他可以在 rake db:migrate 之后就自动插入一个 admin 账号的记录。我在代码里搜出了相关的部分,位置是在 db/fixtures/development/001_admin.rb. 对于这段代码,我就疑惑了,到底是谁调用了这段 fixtures, 而且关于 fixtures 的部分我很难在 rubyonrails 的网站上找到解答。

再者,还有一个文件 db/fixtures/development/002_project.rb 里面是:

Project.seed(:id, [
  { :id => 1, :name => "Rubinius", :path => "rubinius", :code => "rubinius", :owner_id => 1 },
  { :id => 2, :name => "Diaspora", :path => "diaspora", :code => "diaspora", :owner_id => 1 },
  { :id => 3, :name => "Ruby on Rails", :path => "ruby_on_rails", :code => "ruby_on_rails", :owner_id => 1 }
])

Project 是一个 model, 但这个 model 的 seed 方法的描述和说明我应该在哪里才能找到呢?


还有,看 API doc 里面的 form_for 的定义是这样的 form_for(record, options = {}, &proc)..接着我就找不到它可以传入的 options 去哪里查了...

求解惑

这里用了一个seed-fu的 gem

并且是在 rake db:seed_fu 的时候生成的 admin. 而不是 migrate.

做 rails 是很容易出现这种问题。对 rails 不熟悉的时候,会发现很多奇怪的在文档上没有的方法,并且找不到定义。因为各种 gem 都在动态的给 ar 或者 ap 加各种方法。这个要慢慢了解 rails 有什么了之后才会好一点。

#1 楼 @Saito 啊..我犯了想当然的错误.....

原来 seed 方法也是这个 gem 提供的..我看到了....

后面那个问题咋办捏..

@ruohanc form_for 的 option 就在 api form_for 方法下面

:url - The URL the form is submitted to. It takes the same fields you pass to url_for or link_to. In particular you may pass here a named route directly as well. Defaults to the current action.

:namespace - A namespace for your form to ensure uniqueness of id attributes on form elements. The namespace attribute will be prefixed with underscore on the generated HTML id.

:html - Optional HTML attributes for the form tag. 后面举了很多例子

我先再主要看 rails guide,遇到特别的查 rails API。但是还是觉得有点难。。。

建议楼主加上 Ruby 的 API,还有 Rails 源代码。

#3 楼 @diudiutang 举例子可不是 API 文档该有的写法吧....而且这一段并不完全..像 :method, :as 就没有写....

#5 楼 @leekelby 嗯..Ruby 还有 Ruby stdlib 的 API.... Rails 源码暂时还有点..没法看....

rails 的源代码各种混入,各种补丁,最猛的是各种元编程,所以要像 C 语言上从根源上理解他很难,最好的办法是知道他是什么意思就可以了,就比如你上面的 seed 就是写数据就可以了,不然会很累,基本上行不通,面向对象就是让我们不求甚解就能使用和理解程序的

#7 楼 @azhao 最好能有什么方法可以检测某方法来自哪个源文件的定义.....因为类总是被动态的扩展..但又不知道去哪里找 doc..

这个没有办法,好像,反正我是找不到

@ruohanc 可以去 railties 这个 gem 包里面去生成 tags 文件,通过能使用 ctags 的编辑器 (vim sublime text2 textmate 等都支持) 到对应的类下通过快捷键查找, 不过好像不能凭空就去找到源文件定义

#10 楼 @diudiutang 阿哈哈哈哈~ 有更好的方法~ 用 pry 来代替 irb!

# rails c
Loading development environment (Rails 3.2.3)
[1] pry(main)> stat Project.first
Method Information:
--
Name: first
Owner: ActiveRecord::Querying
Visibility: public
Type: Bound
Arity: -1
Method Signature: first(*args, &block)
Source Location: /usr/local/rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/querying.rb:4
[2] pry(main)> show-method Project.first

From: /usr/local/rvm/gems/ruby-1.9.3-p125/gems/activerecord-3.2.3/lib/active_record/querying.rb @ line 4:
Number of lines: 54
Owner: ActiveRecord::Querying
Visibility: public

module Querying
  delegate :find, :first, :first!, :last, :last!, :all, :exists?, :any?, :many?, :to => :scoped
  delegate :first_or_create, :first_or_create!, :first_or_initialize, :to => :scoped
  delegate :destroy, :destroy_all, :delete, :delete_all, :update, :update_all, :to => :scoped
  delegate :find_each, :find_in_batches, :to => :scoped
  delegate :select, :group, :order, :except, :reorder, :limit, :offset, :joins,
           :where, :preload, :eager_load, :includes, :from, :lock, :readonly,
           :having, :create_with, :uniq, :to => :scoped
  delegate :count, :average, :minimum, :maximum, :sum, :calculate, :pluck, :to => :scoped

#9 楼 @azhao 瞧瞧楼上...就是这个了!

确实不错 http://railscasts.com/episodes/280-pry-with-rails 我还说怎么 rails3 会没有 debug。。。。

#13 楼 @azhao 看完我还去 irc 里面呆了会..结果被第一个作者热情的搭话了..他以为我有什么 feedback 要跟他说..

一直用 http://apidock.com/ 上面有 Ruby Rails Rspec 各个版本的方法介绍和用法讨论以及方法源码以及源码位置

需要 登录 后方可回复, 如果你还没有账号请 注册新账号