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

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

ただいまの
回答率

90.53%

  • Ruby

    7629questions

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

  • Ruby on Rails

    7235questions

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

ネスト化された画像のファイルが保存されません(rails)

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 225

yamady

score 148

いつも大変お世話になっておりますm(_ _)m
Railsを使って、複数画像をアップロードできるようにしたいのですが、
どうしてもエラーが発生して手こずってしまっています。。

DBに保存はされているみたいなのですが、imageカラムがすべて「NULL」となってしまっています。

開発環境

  • ruby on rails 5.0.0.1
  • carrierwave

 エラー

  SQL (0.6ms)  INSERT INTO "thumbnail" ("protype_id", "created_at", "updated_at") VALUES (?, ?, ?)  [["protype_id", 45], ["created_at", 2017-09-10 07:47:04 UTC], ["updated_at", 2017-09-10 07:47:04 UTC]]
  SQL (0.4ms)  INSERT INTO "thumbnail" ("protype_id", "created_at", "updated_at") VALUES (?, ?, ?)  [["protype_id", 45], ["created_at", 2017-09-10 07:47:04 UTC], ["updated_at", 2017-09-10 07:47:04 UTC]]
  SQL (0.1ms)  INSERT INTO "thumbnail" ("protype_id", "created_at", "updated_at") VALUES (?, ?, ?)  [["protype_id", 45], ["created_at", 2017-09-10 07:47:04 UTC], ["updated_at", 2017-09-10 07:47:04 UTC]]
  SQL (0.1ms)  INSERT INTO "thumbnail" ("protype_id", "created_at", "updated_at") VALUES (?, ?, ?)  [["protype_id", 45], ["created_at", 2017-09-10 07:47:04 UTC], ["updated_at", 2017-09-10 07:47:04 UTC]]
  SQL (0.1ms)  INSERT INTO "thumbnail" ("protype_id", "created_at", "updated_at") VALUES (?, ?, ?)  [["protype_id", 45], ["created_at", 2017-09-10 07:47:04 UTC], ["updated_at", 2017-09-10 07:47:04 UTC]]
  SQL (0.1ms)  INSERT INTO "thumbnail" ("protype_id", "created_at", "updated_at") VALUES (?, ?, ?)  [["protype_id", 45], ["created_at", 2017-09-10 07:47:04 UTC], ["updated_at", 2017-09-10 07:47:04 UTC]]

 構造

こちらのQiita記事を参考にしておりまして、Protypeモデルにthumbnailモデル(写真)がネスト化して紐づいています。

 ソースコード

  • ビュー(new.html.erb)
    <%= form_for(@post, :multipart => true) do |f| %>
        <label for="name">名前</label>
        <%= f.name_field :name %>
        <label for="textarea">画像を投稿</label>
        <%= f.fields_for :thumbnails do |a| %>
          <%= a.file_field :image, class:"form-control form-none", multiple: "true", name: "protype" %>
        <% end %>
     <% end %>
  • コントローラー(protypes_controller.rb)
  def new
    if signed_in?
      @post = current_user.thumbnails.build
      6.times { @post.thumbnails.build }
    else
      render 'new'
    end
  end

  def create
   @protype = current_user.protypes.create(create_params)
   6.times { @protype.thumbnails.build }
   if @protype.save
       redirect_to root_path
   else
      render 'new'
   end
 end

 private

def create_params
   params.require(:protype).permit(:id, :name, thumbnails_attributes: [:id, :protype_id, :image])
 end

 追記(モデル)

  • モデル(protype.rb)
class Protype < ApplicationRecord
  has_many :thumbnails
  accepts_nested_attributes_for :thumbnails, :allow_destroy => true
end
  • モデル(thumbnail.rb)
class Thumbnail < ApplicationRecord
  belongs_to :protype
  mount_uploader :image, ThumbnailUploader
end

こちらの質問者さんが質問されているように、multipartがないのが問題かと思ったのですが、そういうわけでなさそうで・・・
すみませんが、どなたかご教示くださいませm(_ _)m

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

0

SQL (0.1ms)  INSERT INTO "thumbnail" ("protype_id", "created_at", "updated_at") VALUES (?, ?, ?)  [["protype_id", 45], ["created_at", 2017-09-10 07:47:04 UTC], ["updated_at", 2017-09-10 07:47:04 UTC]]

ログを見ると、imageカラムには何も保存されていないようです。protype_id, created_at, updated_atの3カラムのみです。

createアクションが呼ばれてないのではないでしょうか。

def create
   binding.pry か p create_paramsなどを利用してブレークポイントを作り、値を確認していきます。
   @protype = current_user.protypes.create(create_params)

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/10 19:52

    NCC1701さま、ご回答いただきましてありがとうございますm(_ _)m
    def createには「 6.times { @protype.thumbnails.build } 」と、paramにも「params.require(:protype).permit(:id, thumbnails_attributes: [:id, :protype_id, :image])」を記述してあるはずなのですが・・・^^;
    理解が悪くて申し訳ございません。。

    キャンセル

  • 2017/09/10 20:32

    create_paramsに:imageの値があるか確認してみてください。(追記しました)

    キャンセル

  • 2017/09/10 20:47

    ありがとうございますm(_ _)m
    下記のような結果となりました。

    [83] pry(#<ProtypeController>)> create_params
    => <ActionController::Parameters {"name"=>"こんにちは!"} permitted: true>
    [84] pry(#<ProtypeController>)> create_params[:image]
    => nil

    binding.pryの使い方がいまいち分かっていないのかもしれません(^^;)
    お手数おかけしてしまします。

    キャンセル

  • 2017/09/10 20:47

    imageは入っていないみたいです(>_<)

    キャンセル

  • 2017/09/10 21:07

    むしろ原因に近づいていますね。問題はcontrollerではなくviewにあることがはっきりしたので。
    <%= a.file_field :image, class:"form-control form-none", multiple: "true", name: "review_images[image][]" %>

    <%= a.file_field :image, class:"form-control form-none", multiple: "true", %>
    に変えてみてください。name属性は自動的につけられるはずなので。

    キャンセル

  • 2017/09/10 21:18

    ありがとうございます(*_*)
    name属性を消してみたのですが、次は下記エラーが出てしまいました...。
    found unpermitted parameter: image

    prameterの記述方法が間違っているのでしょうか・・・。

    キャンセル

  • 2017/09/10 22:01 編集

    protype.rbモデルにはaccepts_nested_attributes_for :thumbnailsが記載されてますか?
    現状は
    def create_params
    params.require(:protype).permit(:id, :name, thumbnails_attributes: [:id, :protype_id, :image])
    end
    でうまくいってない状態ですね。いわゆるStrong Parametersのことです

    キャンセル

  • 2017/09/10 23:07

    追記させていただきました。
    accepts_nested_attributes_for :thumbnails

    は書いているのですが、:imageを、同様の質問回答でお見かけしたように {:image[]} と試してもみたのですが、今度は別のエラーが出てしまいました(;;)

    キャンセル

  • 2017/09/10 23:35

    def new
    if signed_in?
    @post = current_user.reviews.build
    6.times { @post.review_images.build }
    else
    render 'new'
    end
    end
    は@protypeやthumbnailsと違ってますが、一致させて試してください。

    キャンセル

  • 2017/09/11 12:04

    さっそくご回答いただきありがとうございます。
    一致させて試してみたのですが、やはり「found unpermitted parameter: image」となってしまいます。。

    今、作っているものと、作成できなかったので別でrails newして作りなおしたもののソースがごっちゃになってしまっていました。ごめんなさいm(_ _)m

    キャンセル

  • 2017/09/11 17:40 編集

    paramas[:protype]はどのようなデータが保存されてますか?p paramas[:protype]で確認してみてください。thumbnails_attributes: [:id, :protype_id, :image]にtypoの可能性はありませんか?

    キャンセル

  • 2017/09/11 18:26

    NCC1701さま、ありがとうございます。
    viewの中に、multiple入れていたのが原因でしたm(_ _)m

    キャンセル

0

ビューのfileインプット欄に余計なプロパティが入ってるので多分それかと

# before
<%= a.file_field :image, class:"form-control form-none", multiple: "true", name: "protype" %>

# after
<%= a.file_field :image, class:"form-control form-none" %>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/09/11 18:25

    ありがとうございます!できましたm(_ _)m

    キャンセル

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

  • ただいまの回答率 90.53%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • Ruby

    7629questions

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

  • Ruby on Rails

    7235questions

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