2

私はオープンソースプロジェクトに何も提出したことがありません。率直に言って、人々がメソッドについてどう思っているかは気にしません。私は「最後」と「最初」のメソッドが大好きで、サンプリングの目的でその概念を「2番目」から「9番目」のメソッドに拡張したいと思います。

これらのメソッドをActiveRecordに移植する独自のカスタムメソッドを作成するにはどうすればよいですか?

**現在、railscasts.comでライアンベイツのスクリーンキャスト#50を視聴しています

**これを実装する方法についてブレインストーミングすると、次のレコードが見つかるまで:id値(0、1、2、3、4 ...)をループできると思います。次に、「3番目の」コマンドは、2番目の一致(Model.third)が見つかるまで、最初の一致をスキップしてスキップできます。.firstがこれと同じ方法を使用するかどうか疑問に思っています。ソースコードをチェックしてみようと思います。:)

**この道を進んでいくと、関連するリンクのリストが残ります(10ポイントを取得しない限り、2つ以上のリンクをリストすることはできません。1つ上げて、さらに追加できるようにしてください)

http://railscasts.com/episodes/50-contributing-to-rails

http://edgeguides.rubyonrails.org/contributing_to_ruby_on_rails.html

4

2 に答える 2

1

とは個々のクラスの個々のメソッドではなく、ActiveRecord のさまざまなクラスに実装されているためfirst、実際には思ったよりも少し複雑です。last

例えば、

  • を使用できます。Post.firstこの場合、 を呼び出していActiveRecord::Base#firstます。

  • を使用できますPost.where(:submitted => true).first。この場合、呼び出していますActiveRecord::Relation#first

  • を使用できますPost.comments.first。この場合、呼び出していますActiveRecord::Associations::CollectionAssociation#first

これがどこに向かっているのかわかりますか?、 などで同様の動作を行うsecondにはthird、これらのメソッドを 1 か所だけでなく複数の場所に実装する必要があります。

ただし、開始するために、実装方法は次のActiveRecord::Relation#secondとおりです。

class ActiveRecord::Relation
  def second
    if loaded?
      @records[1]
    else
      @second ||= limit(2).to_a[1]
    end
  end
end

たとえば、このコードをイニシャライザで実行すると、突然second、すべてのリレーションが呼び出されます。

于 2012-09-09T01:35:52.573 に答える
0

あなたの態度が「率直に言って、Railsの人々がメソッドについてどう思うかは気にしない」という態度である場合、Railsコアにコミットされた何かを取得する幸運を数えません。独自の変更を加えます。

同様に、「プル リクエスト」を Rails チームに送信して、変更を Rails にコミットして戻すこともできますが、変更を Rails にマージするかどうかは、Rails のメンテナーによって決定されます。

開始するには github でプロジェクトのクローンを作成し、自分で変更を加えてからプル リクエストを送信します。ここに明確な指示がありますhttp://guides.rubyonrails.org/contributing_to_ruby_on_rails.html (特にセクション5を参照)

于 2012-09-09T01:23:59.187 に答える