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

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

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

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

Q&A

1回答

1719閲覧

Rails4.2 カスタムValidator

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2015/06/23 04:27

編集2015/06/23 06:57

管理画面からの操作の場合にカスタムValidatorが作動しないようにするにはどうしたら良いでしょうか?

管理画面はactiveadminを使用しています。

item model

lang

1#タイムリミットが過ぎていないアイテムを編集しようとした場合に作動する 2 3class RelistTimeValidator < ActiveModel::Validator 4 def validate(record) 5 user_id = User.current_user.id 6 @item = Item.find_by(user_id: user_id, id: record.id) 7 record.errors[:base] << 'エラータイムリミットが過ぎていません' \ 8 if @item.limit_day - Time.now > 0 9 end 10 end 11 12 13 14validates_with RelistTimeValidator , on: :update

lang

1#item model 2validates :limit_day, timeliness: { on_or_after: :today, format: '%Y/%m/%d %H:%M' }, allow_blank: false, on: :item_update_by_user 3 4 5 6#item controller 7if @item.limit_check 8 respond_to do |format| 9 @item.attributes = {item_status_id: 1, limit_check: false} 10 if @item.save(context: :item_update_by_user) 11 format.html { redirect_to @item, notice: 'アイテムを再出品しました。' } 12 format.json { render :show, status: :ok, location: @item } 13 else 14 format.html { render :relist } 15 format.json { render json: @item.errors, status: :unprocessable_entity } 16 end 17 end 18 else 19 respond_to do |format| 20 @item.attributes = {item_status_id: 1, limit_check: false} 21 if @item.save(context: :item_update_by_user) 22 format.html { redirect_to @item, notice: 'アイテムを編集しました。' } 23 format.json { render :show, status: :ok, location: @item } 24 else 25 format.html { render :edit } 26 format.json { render json: @item.errors, status: :unprocessable_entity } 27 end 28 end 29 end 30 end 31 32#form 33 <%= f.text_field :limit_day %> 34

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

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

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

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

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

guest

回答1

0

状況によってsave時に実行するバリデーションを切り替える

ここの記事が参考になりそうですね。

saveメソッドにcontextオプションを設定してあげると。

投稿2015/06/23 05:02

rifuch

総合スコア1901

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

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

退会済みユーザー

退会済みユーザー

2015/06/23 06:58

あいりがとうございます。追記したように実装したのですがlimit_dayの値がうまく更新できません
rifuch

2015/06/23 07:21

item.limit_dayはどこで代入してますか? 添付のコード内では見当たらないですが・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問