Ruby On Railsでjs.erbから画像データを更新するとnilになります。
まずshow.html.erbからprepare_sample_img.js.erbに飛ばしてinnerHTMLでフォームを出現させています。
ruby
1#/mypage/requests/show.html.erb 2 3<div id='sample_img' class="request-detail"> 4 <% if @request.sample_img.present? %> 5 <%= image_tag @request.sample_img, class: "floor-plan-img-in-mypage-requests-show" %> 6 <% else %> 7 なし 8 <% end %> 9 <%= link_to "変 更", prepare_sample_img_mypage_request_path(id: @request.id), class: "btn-modify", remote: true %> 10 </div>
ruby
1#/config/routes.rb 2 3Rails.application.routes.draw do 4 namespace :mypage do 5 resources :requests do 6 member do 7 get 'prepare_sample_img' 8 get 'update_sample_img' 9 end 10 end 11 end 12end 13
ruby
1#/mypage/requests_controller.rb 2 3class Mypage::RequestsController < Mypage::ApplicationController 4 before_action :set_request, only: [:show, :prepare_sample_img,:update_sample_img] 5 6def create 7 @request = Request.new(request_params) 8 @request.user_id = current_user.id 9 respond_to do |format| 10 if @request.valid? 11 building = Building.where(name: @request.name).first_or_create do |row| 12 row.name = @request.name 13 row.address = @request.address 14 end 15 @request.building_id = building.id 16 @request.save(validate: false) 17 format.html { redirect_to mypage_requests_path, notice: '作成しました' } 18 format.json { render :show, status: :created, location: @request } 19 else 20 format.html { render :new } 21 format.json { render json: @request.errors, status: :unprocessable_entity } 22 end 23 end 24 end 25 26 def prepare_sample_img 27 end 28 29 def update_sample_img 30 if @request.update(sample_img: params[:request][:sample_img]) 31 redirect_to mypage_request_path(@request), notice: "変更しました。" 32 else 33 redirect_to mypage_request_path(@request), alert: "変更できませんでした" 34 end 35 end 36 37 private 38 39 def request_params 40 params.fetch(:request, {}).permit(:name, :no, :address, :floor, :station, :current, :schedule, :key_place, :person, :remark, :neighbor_flg, :panorama_flg, :floor_plan) 41 end 42 43 def set_request 44 @request = Request.find_by(id: params[:id]) 45 end 46end
ruby
1#/mypage/requests/prepare_sample_img.js.erb 2 3var sample_img = document.getElementById("sample_img"); 4 5sample_img.innerHTML = '<form style="height:32px; width:350px;"'+ 6 'action="/mypage/requests/<%= @request.id %>/update_sample_ing" method="get">'+ 7 '<input type="file" name="request[sample_img]" id="request_sample_img" autocomplete="off">'+ 8 '<input type="hidden" name="id" value="<%= @request.id %>">'+ 9 '<input class="btn-submit2" type="submit" value="更 新"></form>'
上のフォームを送信するとparams[:request][:sample_img]は渡ってくるのですが、updateメソッド後のsample_imgを調べたところ、nilでした。
ruby
1#model/request.rb 2 3class Request < ActiveRecord::Base 4 mount_uploader :sample_img, ImageUploader 5end
ruby
1#uploders/image_uploder.rb 2 3class ImageUploader < CarrierWave::Uploader::Base 4 include CarrierWave::MiniMagick 5 def store_dir 6 "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 7 end 8 9 def extension_white_list 10 %w(jpg jpeg gif png zip) 11 end 12 13 def filename 14 "#{secure_token}.#{file.extension}" if original_filename.present? 15 end 16 17 protected 18 def secure_token 19 var = :"@#{mounted_as}_secure_token" 20 model.instance_variable_get(var) or model.instance_variable_set(var, SecureRandom.uuid) 21 end 22 23end
createしたときは問題なくsample_imgカラムにデータが入るのですが、そのデータをshow.html.erbで別の画像に更新しようとしたところ、インスタンスのupdate自体は成功し、sample_imgはnilになってしまいます。
エラーログが出ず、ただsample_imgカラムがnilになるので解決策を見つけるのが難しいです。
何卒、間違いのご指摘の方よろしくおねがいいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/03 10:03 編集
2018/08/04 00:33 編集