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

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

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

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

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

1回答

3964閲覧

Rspec/Fakerを用いてimageを作成

s.hiroaki

総合スコア21

Ruby

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

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2016/10/09 10:58

編集2016/10/09 14:25

###前提・実現したいこと
画像保存のバリデーションのテスト

###発生している問題・エラーメッセージ

問題は画像をテスト環境で作成した際に、image_urlがnilになってしまうことです。

1) CaptureImage#main_image? valid with main_image Failure/Error: expect(capture_image).to be_valid expected #<CaptureImage id: nil, image_url: nil, prototype_id: 60, created_at: nil, updated_at: nil, satus: 0> to be valid, but got errors: Image url can't be blank

###該当のソースコード

ruby

1describe "#main_image?" do 2 it "valid with main_image" do 3 capture_image = build(:capture_image) 4 binding.pry 5 expect(capture_image).to be_valid 6 end 7 end

ruby

1factory :capture_image do 2 status "main_image" 3 image_url { Faker::Avatar.image } 4 association :prototype 5 end

ruby

1class CaptureImage < ActiveRecord::Base 2 belongs_to :prototype 3 enum satus: {main_image: 0, sub_image: 1} 4 mount_uploader :image_url, ImageUploader 5 validates :image_url, presence: true, if: :main_image? 6 7 def main_image? 8 status == "main_image" 9 end 10end

※capture_imageモデル追加しました。(修正)
(enumでmain_imageかsub_imageか管理しています)
###試したこと
上記のように実装して、binding.pryが起きたところで止めて確認しても、

#<CaptureImage:0x007fe1d98d4c68 id: nil, image_url: nil, prototype_id: 60, created_at: nil, updated_at: nil, satus: 0>

このようになってしまい

[1] pry(#<RSpec::ExampleGroups::CaptureImage::MainImage>)> capture_image.image_url = "gggg.png" => "gggg.png" [2] pry(#<RSpec::ExampleGroups::CaptureImage::MainImage>)> capture_image => #<CaptureImage:0x007ffc97d33f60 id: nil, image_url: nil, prototype_id: 68, created_at: nil, updated_at: nil, satus: 0> [3] pry(#<RSpec::ExampleGroups::CaptureImage::MainImage>)>

このようにimage_urlが入ってきません。。。
テストを通りません。
ちなみに、

[1] pry(#<RSpec::ExampleGroups::CaptureImage::MainImage>)> capture_image.status = "sub_image"

とすると、statusは普通に1に変わります。なぜかimage_urlだけ追加・変更不可です。

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

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

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

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

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

hana-da

2016/10/09 13:44

CaptureImageモデルのソースコードが見てみたいです。
s.hiroaki

2016/10/09 14:19

追加しました!何か気づいた点とかありましたら是非アドバイスください!m(_ _)m
s.hiroaki

2016/10/09 14:21 編集

他に何か載せた方がいい箇所ありましたら、ご指摘くださいm(_ _)m
guest

回答1

0

image_urlだけ追加・変更不可な理由は

ruby

1class CaptureImage < ActiveRecord::Base 2 mount_uploader :image_url, ImageUploader

となっているので image_url は CarrierWave によって管理されているためだと思います。

残念ながら私は CarrierWave には詳しくないのですが APIリファレンス を見ると mount_uploader :image_url, ImageUploader した場合は image_url_url のようなインスタンスメソッドが CarrierWave によって追加されるようなので、おそらく意図していない設定になっているのではないかと思います。

CarrierWave の使い方を再確認する事をおすすめいたします。

投稿2016/10/09 14:47

hana-da

総合スコア1728

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

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

s.hiroaki

2016/10/09 22:40

ありがとうございますm(_ _)m 再確認いたします!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問