質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Q&A

解決済

1回答

877閲覧

ruby on rails バリデーションの共通化 動的にカラムを指定

lolohacker

総合スコア31

Ruby on Rails 5

Ruby on Rails 5は、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

0グッド

0クリップ

投稿2018/09/26 09:34

編集2018/09/27 05:50

前提・実現したいこと

Modelに共通のクラスをincludeさせてuniqunessのバリデーションを共通化したいです

発生している問題

Ruby

1module ShareMdl 2 extend ActiveSupport::Concern

Ruby

1class Test < ApplicationRecord 2 include ShareMdl

ShareMdlに

Ruby

1validates :XXXXX_id, uniquness: { scope: [:dev_id, :group_id] }

という感じでバリデーションを記載し、
他のModelにもincludeして共通化したいのですが、
XXXXX_idの部分がそれぞれのModelによって異なるので
動的にしたいと思っています。

上記のようなことを実現する方法はありますか?
実現しようとしていることが別の方法ならあるといった場合でも
参考に教えて頂けると助かります。
恐れ入りますが、ご教示お願い致します。

補足

・ruby 2.3.3p222 (2016-11-21 revision 56859) [x64-mingw32]
・Rails 5.1.5

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

カスタムバリデータで共通化する手があります

ruby

1class ShareGroupedValidator < ActiveModel::EachValidator 2 def initialize(options) 3 super 4 # 指定が多いvalidatesの共通化に使うこともできる 5 options[:class].validates( 6 *attributes, 7 uniquness: { scope: [:dev_id, :group_id] } 8 ) 9 end 10 11 #本来は通常のオプションではできないvalidateを行うための仕組み、今回は空関数 12 def validate_each(record, attribute, value); end 13end 14 15class Test1 < ApplicationRecord 16 validates :XXXXX_id, share_grouped: true 17end 18 19class Test2 < ApplicationRecord 20 validates :YYYYY_id, share_grouped: true 21end

投稿2018/09/28 00:31

編集2018/09/28 00:32
Ighrs

総合スコア656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

lolohacker

2018/10/02 05:56

返事が遅くなり大変申し訳ありません。 やはりモデル毎に記載するしかないということですね。 回答ありがとうございました。 参考にさせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問