こんにちは。
validationで外部からの値を存在することに対してのvalidationを作ることはできますか?
画像を保存する際のurlを入力paramsで受け取っているのですが、そのparamsが空白の場合はエラーで返すようにしたいのです。
現状のコードです。
app/model/image.rb
ruby
1class Image < ActiveRecord::Base 2 def remote_url(url)←ここのurlをparamsで受け取っています。 3 return errors.add(:image, 'URLを入力してください') if url.blank? ←応急処理 4 self.image = URI.parse(url) 5 end 6end
上記のコードで応急処理がない場合のurlがnilの場合です。
ruby
1Failure/Error: self.image = URI.parse(url) 2 3TypeError: 4 no implicit conversion of URI::Generic into String
rspecのコードです。
ruby
1RSpec.describe Image, type: :model do 2 describe 'validation' do 3 let(:image) { build(:image) } 4 it 'remote_urlは空白ではない' do 5 url = '' 6 image.remote_url(url) 7 expect(image).not_to be_valid 8 end 9 end 10end 11 12→ 13Failure/Error: expect(image).not_to be_valid 14 expected #<Image id: nil, imageable_id: 1, imageable_type: "MyString", created_at: nil, updated_at: nil, image_file_name: nil, image_content_type: nil, image_file_size: nil, image_updated_at: nil> not to be valid
カスタムvalidationでこのurlの存在がなければ、エラーにしたいのです。
ただ、メソッドの値に対してvalidationを書くことはできるのでしょうか?
あくまでもurlは外部の値から来るものなので、この値に関してのvalidationの方法が思いつかなかったです。
カラムの値なら、やりようはあると思っております。
現状のコードはモデルのメソッドの中にvalidation要素も入っていて、違和感を感じております。
希望するものは、応急処理を別メソッドに移したいです。
何かいい方法はありますでしょうか?m(_ _)m
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/06/23 14:14