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

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

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

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

Ruby on Rails 4

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

Q&A

1回答

3674閲覧

carrierwaveで画像アップロードで保存は成功するが、imageが入らず困ってます。

qaz3330

総合スコア113

Ruby on Rails

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

Ruby on Rails 4

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

0グッド

0クリップ

投稿2016/01/17 10:19

rails4
にて
carrierwaveで画像アップロードの機能を実装しております。

しかし、表題の通り、画像アップロードで保存は成功するが、imageが入らず困ってます。

経緯と、当該箇所のソースを記述しました。
ご指摘頂けますと幸いです。

view

<%= form_for @member, url: members_path do |f| %> <%= f.fields_for :profile_images do |ff| %> <%= ff.file_field :image %> <% end %> <% end %>

model

class ProfileImage < ActiveRecord::Base belongs_to :member mount_uploader :image, Admin::PhotosPathUploader end

controller

def new @member = Member.new 2.times { @member.profile_images.build } end def create @member = Member.new(member_params) @member.save! end def member_params params.require(:member).permit(profile_images_attributes: [:image]) end

controllerの
member_paramsの所でbinding.pryをしてみると

"profile_images_attributes"=> {"0"=> {"image"=> #<ActionDispatch::Http::UploadedFile:0x007fda51266cf8 @content_type="image/png", @headers= "Content-Disposition: form-data; name=\"member[profile_images_attributes][0][image]\"; filename=\"hoge.png\"\r\nContent-Type: image/png\r\n", @original_filename="hoge.png", @tempfile= #<File:/var/folders/ct/7htplkvn1p77skk40j131s8r0000gq/T/RackMultipart20160117-18650-1hzsjvr.png>>, "id"=>"15"}},

となっており、ファイル自体はアップロードしている気がします。

エラーが起こるわけでもなく、ただ、ProfileImageにimageが保存されておりません。

ちなみに、controllerの
member_paramsの中身

"profile_images_attributes"=> {"0"=>{}, "1"=>{}}

member_paramsの中にimageが入るはずなのですが、
その原因がわからず困っております。

何卒宜しくお願いします。

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

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

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

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

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

guest

回答1

0

Rails4系からStrongParameterが実装されているため、paramsの受け取る値をコントローラーで明示してあげないと受け取れません。

なので下記ように指定すればimageの値が取れます。

ruby

1profile_params = params.require(:member).permit(:profile_images_attributes: [:image]) 2

投稿2016/01/20 06:48

suzUkai74

総合スコア135

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

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

qaz3330

2016/01/20 11:20

ご回答有難う御座います。 app/controllers/members_controller.rbに以下のようにせっていしましたがダメでした。 profile_params = params.require(:member).permit(profile_images_attributes: [:image]) ちなみに、StrongParameter内にはほかにも、nameやaddress等のカラムも入ってきており、image以外のカラムは適切に保存されております。 imageだけがなぜか上手くいかない状態です・・・。
suzUkai74

2016/01/21 01:25 編集

mount_uploader :image, Admin::PhotosPathUploader こちらは正しいですか? 画像データはきているので、画像のマウントがうまく行ってないと考えられます。
qaz3330

2016/01/21 16:50

ご指摘有難う御座います。 uploaderに関しては以下のファイルで定義しております。 app/uploaders/admin/photos_path_uploader.rb class Admin::PhotosPathUploader < CarrierWave::Uploader::Base include CarrierWave::RMagick end
qaz3330

2016/01/21 16:51

app/models/member.rb でもAdmin::PhotosPathUploaderをマウントしており、memberモデルの方は上手くアップロードできております。 今回の要件(複数枚写真をアップロード)を満たそうとした際に上手くいかず・・・。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問