私はレールの宝石を作成するのが面倒です。ActiveRecordにメソッドを追加するのに問題があります。のは、私は、次の操作を行いたいとしましょう:Rails:activerecordにメソッドを追加する(正しい方法ですか?)
class DemoModel < ActiveRecord::Base
custom_method :first_argument, :second_argument
end
、この作業を行うために、私は以下に投げる:
module DemoMethod
def self.included(base)
base.extend(ClassMethods)
end
module ClassMethods
def custom_method(*fields)
@my_fields = fields
end
end
end
ActiveRecord::Base.send(:include, DemoMethod)
ここまでは、とても良いです。
問題は、モデルのインスタンスからmy_fields変数にアクセスすることです。例えば、私のようなものとのform_for開くかもしれない:難易度がある
module ActionView::Helpers::FormHelper
def fields_for(record_name, record_object, options = {}, &block)
the_fields = record_object.<I WANNA ACCESS @my_fields HERE!!!>.html_safe
# ...
end
end
、(「custom_method」は唯一、私はクラスメソッドとしてヘルパーに設定した場合は動作するようですが、それは.self、今のモデルであることを意味しDemoModel)を使用しています。 "custom_method self、:first_argument、:second_argument"を使ってオブジェクトを手作業で渡すことができましたが、私のすばらしい "custom_method"宝石のユーザに引数のリストに 'self'を前に付ける必要があるのはちょっと不思議です。
それで、賢明なRailsの人がcustom_methodを通して特定のオブジェクトの値を設定し、fields_forのような別のものを取り出すのはどうでしょうか?
いつもどんな提案もありがとうございます。
もちろんです。 。拡張は私を混乱させていた。どうもありがとう。 – PlankTon