間違っていなければ、ヘルパー メソッドは主にビューで使用するように設計されています。
私が確信しているのは、ヘルパー メソッドがモデルの範囲外にあることです。つまり、操作する属性をそれらに渡す必要があります。例:
def category_names(categories, seperator = ", ")
categories.map(&:name).flatten.join(seperator).titleize
end
そしてあなたのビューを呼び出します:
category_names @post.categories
ビューで排他的に使用されていない自作の「ヘルパー」メソッドを見つけた場合は、サービス オブジェクトを作成してモデルに含めることができます。
編集:サービスオブジェクト
「app」ディレクトリの下に「services」ディレクトリを作成し、そこにクラスを作成できます。
例を挙げましょう。User モデル クラスを取得しました。パスワードに関連するすべてのメソッドを UserPassword サービス オブジェクトにグループ化したいと考えています。
ユーザークラス:
class User < ActiveRecord::Base
include ::UserPassword
...
end
UserPassword サービス オブジェクト:
require 'bcrypt'
module UserPassword
def encrypt_password
if password.present?
self.password_salt = BCrypt::Engine.generate_salt
self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
end
end
module ClassMethods
def authenticate(email, password)
user = find_by_email email
if user and user.password_hash == BCrypt::Engine.hash_secret(password, user.password_salt)
user
end
end
end
def self.included(base)
base.extend(ClassMethods)
end
end
したがって、私の Userインスタンス化されたオブジェクト(つまりu = User.first
) は を呼び出すことができu.encrypt_password
、私の Userクラスは を呼び出すことができますUser.authenticate
。
他の方法があるかもしれませんが、私はそれが柔軟で、書きやすく、維持しやすいと思います:)