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

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

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

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

Ruby on Rails

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

0回答

1567閲覧

Railsで画像をアップした際に、緯度・経度・撮影日時を取得してparamsで飛ばしたい!

k.chisato

総合スコア18

Ruby

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

Ruby on Rails

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

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

0クリップ

投稿2019/03/17 06:53

編集2019/03/18 01:51

画像を投稿画面(new)にアップロードし、
それを投稿(create)するとGoogle Map上にピンを立てて表示するアプリを開発しています。

現在は位置情報を緯度経度を手入力する方式で機能しているのですが、
画像から取得する方式に変更したいと考えています。

質問内容

①アップロードした画像から緯度・経度・撮影日時の情報の取得
②取得した情報をparamsで飛ばす方法
③飛ばした情報をDBのカラムに反映する方法

上を①から順に実現したいと考えています・・・
(ポイントが絞れておらずすみません)

前提

・画像アップロード機能にはActiveStorageとS3を組み合わせています。
・mini_exiftoolとexifrを試してみたのですが、記述方法がよく分からず挫折しました・・・

該当のソースコード

controller

1class StampsController < ApplicationController 2 before_action :set_stamp, only: [:show, :edit, :update, :destroy] 3 4 def index 5 @stamps = Stamp.all 6 end 7 8 def show 9 end 10 11 def new 12 @stamp = Stamp.new 13 end 14 15 def edit 16 end 17 18 def create 19 @stamp = Stamp.new(stamp_params) 20 21 respond_to do |format| 22 if @stamp.save 23 format.html { redirect_to @stamp, notice: 'Stamp was successfully created.' } 24 format.json { render :show, status: :created, location: @stamp } 25 else 26 format.html { render :new } 27 format.json { render json: @stamp.errors, status: :unprocessable_entity } 28 end 29 end 30 binding.pry 31 end 32 33 def update 34 respond_to do |format| 35 if @stamp.update(stamp_params) 36 format.html { redirect_to @stamp, notice: 'Stamp was successfully updated.' } 37 format.json { render :show, status: :ok, location: @stamp } 38 else 39 format.html { render :edit } 40 format.json { render json: @stamp.errors, status: :unprocessable_entity } 41 end 42 end 43 end 44 45 def destroy 46 @stamp.destroy 47 respond_to do |format| 48 format.html { redirect_to stamps_url, notice: 'Stamp was successfully destroyed.' } 49 format.json { head :no_content } 50 end 51 end 52 53 private 54 def set_stamp 55 @stamp = Stamp.find(params[:id]) 56 end 57 58 59 def stamp_params 60 params.require(:stamp).permit(:user_id, :title, :description, :shooted_at, :latitude, :longitude, :country, :image) 61 end 62end 63

html

1 <div class="new-container"> 2 <div class="content"> 3 <%= render 'form', stamp: @stamp %> 4 </div> 5 </div>

html

1<!--上の部分テンプレートです!--> 2<%= form_with(model: stamp, local: true) do |form| %> 3 <% if stamp.errors.any? %> 4 <div id="error_explanation"> 5 <h2><%= pluralize(stamp.errors.count, "error") %> prohibited this stamp from being saved:</h2> 6 7 <ul> 8 <% stamp.errors.full_messages.each do |message| %> 9 <li><%= message %></li> 10 <% end %> 11 </ul> 12 </div> 13 <% end %> 14 <div class="upload-content"> 15 <div class="image-area"> 16 <div class="field image-upload-area"> 17 <%= form.label :image %> 18 <%= form.file_field :image %> 19 </div> 20 </div> 21 22 <div class="text-area"> 23 <div class="field"> 24 <%= form.label :user_id %> 25 <%= form.number_field :user_id %> 26 </div> 27 28 <div class="field"> 29 <%= form.label :country %> 30 <select style="display: block" name="stamp[country]"> 31 <optgroup label="アジア"> 32 <option value="日本">日本</option> 33 <option value="韓国">韓国</option> 34 </optgroup> 35 <optgroup label="ヨーロッパ"> 36 <option value="イタリア">イタリア</option> 37 <option value="ドイツ">ドイツ</option> 38 </optgroup> 39 </select> 40 </div> 41 42 43 <div class="field"> 44 <%= form.label :title %> 45 <%= form.text_area :title %> 46 </div> 47 48 <div class="field"> 49 <%= form.label :description %> 50 <%= form.text_area :description %> 51 </div> 52 53 <!--写真から自動的に取得できるようにする--> 54 <div class="field"> 55 <%= form.label :shooted_at %> 56 <%= form.datetime_select :shooted_at %> 57 </div> 58 59 <!--国名か写真から自動で取得できるようにする--> 60 <div class="field"> 61 <%= form.label :latitude %> 62 <%= form.number_field :latitude %> 63 </div> 64 65 <!--国名か写真から自動で取得できるようにする--> 66 <div class="field"> 67 <%= form.label :longitude %> 68 <%= form.number_field :longitude %> 69 </div> 70 71 <div class="actions"> 72 <%= form.submit %> 73 </div> 74 </div> 75 </div> 76<% end %> 77

その他

まだteratail初心者で質問の仕方が分かっておらず,
情報不足などありましたらすみません。
「そもそも共有するコードが足りない!!」などあれば遠慮なく仰っていただければと思います!

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

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

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

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

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

y_waiwai

2019/03/17 08:59

で、なにがわからないんでしょうか
k.chisato

2019/03/18 01:51

失礼しました。 質問内容を追記しましたのでご確認頂ければと思います・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問