私は、オブジェクトのコレクションを操作するいくつかのメソッドを作成しようとしています。コレクションのカスタムメソッドを作成する
私は私のコントローラで私が持っているコンフィギュレーションモデルで
def show
@big = Configuration.find(params[:id]).elements
@custombig = @big.getchanged
end
次の文があります。
require 'lib/validation_rules'
class Configuration < ActiveRecord::Base
include ValidationRules
、私のlibフォルダに、私はvalidation_rulesというファイルがあります:
module ValidationRules
def getchanged()
names =[]
self.each do |pp|
names << pp.name
return names
end
end
end
を
アイデアは簡単です。同じモデルでは、多くの設定ルールが必要になります。コントローラーとモデルから離しておきたい(私がたくさん言うとき、私は約200を意味します)。
上記のコードの問題は、私が呼び出したときに、メソッドが存在しないことを示しています。@bigは1つの構成オブジェクトだけでなく、構成の配列なので、これが起こっているようです。 同じアプローチを1つのConfigurationオブジェクトで試したところ、うまくいきましたが、このバージョンではうまくいきません。
この「カスタム」ライブラリのメソッドをデフォルトの配列アーゼルに追加するにはどうすればよいですか?
上記のメソッドはテストであり、私は何をする必要があるのか、コードは問題ではありませんが、エラーをスローする前にRailsがそこを見ていません。
ありがとうございました!
素晴らしい!美しく動作します。 – Lievcin
実際には、Enumerableモジュールがどのように動作するのかについて私の答えで実際には間違っていました( 'each'は実際にEnumerableを含むクラスによって定義されています - つまりArrayとHashは 'each'を定義し、Enumerableは 'map' )。私はそれを修正します。 –
これを特定のモデルに接続する方法はありますか?例えば、私がA.allをしたら、そのコレクションに新しいメソッドを持たせたいのですが、B.allにメソッドを含めるべきではありません。このソリューションは、Enumerableから継承したものにdo_somethingを追加します。私は特定のインスタンスのためだけにそれをしたい。 –