Railsのモデルのヘルパーメソッドに適切な場所はありますか?コントローラーとビューにはヘルパーメソッドがありますが、モデルヘルパーメソッドを配置するのに最適な場所はわかりません。 ActiveRecord::Base
にメソッドを追加することは別として、私はそうしたくない。
[〜#〜] update [〜#〜]:懸念は非常に理にかなっているようです。これが私が欲しいものの例です。特定のモデルは削除できないため、常に例外をスローするコールバックを追加します。
before_destroy :nope
def nope
raise 'Deleting not allowed'
end
心配で、私はこのようなことをすることができますか?
class MyModel < ActiveRecord::Base
include Undeletable
end
module Undeletable
extend ActiveSupport::Concern
included do
before_destroy :nope
end
def nope
raise 'Deleting not allowed'
end
end
これはRailsこれを行う方法ですか?
helper_methodを使用したい場合my_helper_method
model
内に、次のように記述できます
ApplicationController.helpers.my_helper_method
いくつかのメソッドをオーバーライドする必要がある場合など、もう少し柔軟性が必要な場合は、次のようにできます。
class HelperProxy < ActionView::Base
include ApplicationController.master_helper_module
def current_user
#let helpers act like we're a guest
nil
end
def self.instance
@instance ||= new
end
end
そして次に
HelperProxy.instance.my_helper_method
神経が強い場合は、ApplicationController.master_helper_module
を直接model
に挿入します。
via:makandracardsの投稿。
参考のために: http://railscasts.com/episodes/132-helpers-outside-views
Rails 4.2の複数のモデルで共有されているコードをどこに置くかが問題である場合、標準的な答えは懸念を使用することです: =で懸念を使用する方法Rails 4
ただし、標準のRailsモジュールが含まれていて、marek-lipkaが示唆するように拡張するだけの場合) this など、いくつかの適切な引数があります。
モデルではApplicationControllerヘルパーメソッドを使用しないことを強くお勧めします。これは、不要な手荷物を一緒にインポートするためです。これは、MVC要素を分離しておらず、アプリの相互依存関係が多すぎることを意味するため、通常、私の意見では悪臭です。
ビュー内で使用されるだけのメソッドを追加してモデルオブジェクトを変更する必要がある場合は、デコレータを確認してください。例 https://github.com/drapergem/draper