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

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

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

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

Q&A

解決済

1回答

2219閲覧

rails 2つのファイルをアップロードするformの書き方

pebble8888

総合スコア390

Ruby on Rails 4

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

0グッド

1クリップ

投稿2016/11/12 12:28

2つのファイルをアップロードするformの書き方で分からないところがあります。

carrierwaveを使っています。

この辺を参考にしていますが、1番め、2番めのファイルをそれぞれ、別個に選択して、
リクエスト内にdispidxの値として入れるように拡張しようとしています。

リンク内容

現状のソース

<%= f.fields_for :photos do |p| %> <%= f.hidden_field 'photos[photo][dispidx]', :value => '1', :multiple => true %> <div class="field"> <%= p.label :image1 %><br> <%= p.file_field :image1, name: "photos[photo][image]", :multiple => true %> </div> <%= f.hidden_field 'photos[photo][dispidx]', :value => '2', :multiple => true %> <div class="field"> <%= p.label :image2 %><br> <%= p.file_field :image2, name: "photos[photo][image]", :multiple => true %> </div> <% end %>

現状受け取っているリクエスト

"photos"=> {"photo"=> "dispidx:1"=>#<ActionDispatch::Http::UploadedFile:0x007f92973b6d80 @tempfile=#<Tempfile:/var/folders/75/bxdcyhzd253b3mhcq7yr_02h0000gn/T/RackMultipart20161112-60975-hemsh7.png>, @original_filename="hoge1.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"photos[photo][dispidx:1]\"; filename=\"hoge1.png\"\r\nContent-Type: image/png\r\n">, "dispidx:2"=>#<ActionDispatch::Http::UploadedFile:0x007f92973b6448 @tempfile=#<Tempfile:/var/folders/75/bxdcyhzd253b3mhcq7yr_02h0000gn/T/RackMultipart20161112-60975-12j4rnn.png>, @original_filename="hoge2.png", @content_type="image/png", @headers="Content-Disposition: form-data; name=\"photos[photo][dispidx:2]\"; filename=\"hoge2.png\"\r\nContent-Type: image/png\r\n">}}

欲しいリクエスト

"photos"=>[ {"photo"=>{"image"=>#<ActionDispatch...>, "dispidx"=> 1}, {"photo"=>{"image"=>#<ActionDispatch...>, "dispidx"=> 2}} ]

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

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

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

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

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

guest

回答1

0

自己解決

自己解決しました。
空のsquare bracketを使うと配列、同じキーが現れると次の配列要素とみなすという動作をするようです。
CarrierWave関係なかった。

<%= f.fields_for :photos do |p| %> <%= hidden_field_tag 'photos[][dispidx]', "1" %> <div class="field"> <%= p.label :image1 %><br> <%= p.file_field :image1, name: "photos[][image]" %> </div> <%= hidden_field_tag 'photos[][dispidx]', "2" %> <div class="field"> <%= p.label :image2 %><br> <%= p.file_field :image2, name: "photos[][image]" %> </div> <% end %>

出力結果

"photos"=> [{"dispidx"=>"1", "image"=>#<ActionDispatch...>}, {"dispidx"=>"2", "image"=>#<ActionDispatch...>}]

投稿2016/11/12 15:01

pebble8888

総合スコア390

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問