Railsのモデルで共通部分をまとめる方法を教えてください。Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。登録してこのコミュニティに参加するどなたでも質問していただけますどなたでも回答していただけます最もよい回答には賛成票が入り、最上位に上がりますホーム質問タグユーザーRailsのモデルで共通部分をまとめる方法を教えてください。Railsで開発をしています。IDEはRubyMineを使ってます。'm_'endこのようなメソッドを持っています。(3つのモデルに対応するテーブルは全部モデル名の前に「m_」をつけているようになっています。)同じメソッドを持っているからこれを共通的にまとめて簡単にしたいんです。Rails初心者なので、どうすればいいかよくわかりません。票0ActiveSupport::Concernを使ってみました。Orderの3つのクラスがあり、UserとItemはテーブル名に"m_"というprefixが付く設計です。:itemend以下は動作確認用のテストコードです。endendGitHubにもコードをアップしているので参考にしてみてください。|0実装の共有はモジュールを使うのが選択肢の一つかと思います。抜けてたので足しました。7:28このコードは期待した動作になりませんよ。self.xxxのselfはTblnamePrefixを指すので、クラスでincludeしたところでクラスメソッドになるわけではありません。Hoo.table_name_prefixはNoMethodErrorになります。'hoge'も不要なはずですよ。このケースではNoMethodErrorにならないですね。モデルにあるtable_name_prefixが呼び出されるので、空文字""が返ってきます。1:32self.の部分が抜けて検証していました。-sで確認したときにそのような動作をした)ので強引にrequireして名前解決しているといった次第です。他に何か間違えたのかもしれませんが。3:43@cul8er:回答、ありがとうございます。試してみましたが、できませんでした。「m_」がなく、モデルの複数型のままでした。|0直接の回答ではないのですが、これぐらいだと必要なモデルに直接書いておいた方がいいのではないでしょうか。:nameが共通して存在するからと言って、それを共通化することは普通はやりません。table_name_prefixも設定の一部であると考えると、共通化して隠蔽するには適さない内容だと思います。すべてのモデルに共通しているなら共通化しても良いかもしれません。その3つのモデルに他と明らかに違う特徴があり、それをモジュールなり継承なりで表現できるのであれば、それは共通化の理由になります。endというのはみっともないので、gem作りました。installしてください。'm_'endと書けるようになります。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。