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

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

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

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

Ruby

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

Q&A

1回答

627閲覧

DBに値が保存されない

komati88

総合スコア6

Ruby on Rails 5

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

Ruby

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

0グッド

0クリップ

投稿2020/10/21 14:00

編集2020/10/24 00:50

前提・実現したいこと

Ruby on ralsで投稿機能を作成中

発生している問題・エラーメッセージ

エラーがなにも出ない
chinema_nameカラムだけデータが表示される。

該当のソースコード

投稿詳細画面のスクリーンショット

Route.rb

Rails.application.routes.draw do root to: "home#top" devise_for :users resources :users resources :items do resource :likes, only: [:create, :destroy] resources :item_comments, only: [:create, :destroy, :index] end resources :chinemas end

ChinemasController

class ChinemasController < ApplicationController before_action :authenticate_user!, except: [:index] def index @chinemas = Chinema.all.order(id: "DESC") end def new @chinema = Chinema.new end def create binding.pry @chinema = current_user.chinemas.build(chinema_params) if @chinema.save redirect_to chinema_path(@chinema), notice: "レシピを投稿しました。" else render :new end end def show @chinema = Chinema.find(params[:id]) end def edit @chinema = Chinema.find(params[:id]) if @chinema.user != current_user redirect_to chinemas_path, alert: "不正なアクセスです。" end end def update @chinema = Chinema.find(params[:id]) if @chinema.update(chinema_params) redirect_to chinema_path(@chinema), notice: "投稿を更新しました。" else render :edit end end def destroy chinema = Chinema.find(params[:id]) chinema.destroy redirect_to user_path(chinema.user), notice: "投稿を削除しました。" end private def chinema_params params.require(:chinema).permit(:chinema_name, :chinem_body, :chinem_image) end end

ChinemaModel

class Chinema < ApplicationRecord belongs_to :user, optional: true attachment :chinema_image geocoded_by :address after_validation :geocode with_options presence: true do validates :chinema_name validates :chinema_body validates :chinema_image end end

UserModel

class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :confirmable attachment :profile_image has_many :items, dependent: :destroy has_many :likes, dependent: :destroy has_many :liked_items, through: :likes, source: :item has_many :chinemas, dependent: :destroy has_many :item_comments, dependent: :destroy validates :username, presence: true def already_liked?(item) self.likes.exists?(item_id: item.id) end end

chinemas/_form.html.erb

<section class="section"> <div class="container"> <div class="columns is-centered"> <div class="column is-6"> <%= form_for @chinema do |f| %> <div class="field"> <%= f.label :chinema_name, "名前", class: "label" %> <%= f.text_field :chinema_name, class: "input" %> </div> <div class="field"> <%= f.label :chinema_body, "感想", class: "label" %> <%= f.text_area :chinema_body, class: "textarea" %> </div> <div class="field"> <%= f.label :address, "住所", class: "label" %> <%= f.text_area :address, class: "input" %> </div> <div class="field"> <%= f.label :chinema_image, "写真", class: "label" %> <%= f.attachment_field :chinema_image, class: "input" %> </div> <%= f.submit '投稿', class: "button is-success" %> <% end %> </div> </div> </div> </section>

chinemas/show.html.erb

<section class="hero is-success"> <div class="hero-body"> <div class="container"> <h1 class="title"> 詳細 </h1> </div> </div> </section> <section class="section"> <div class="container"> <div class="columns is-centered"> <div class="column is-5"> <div class="card"> <div class="card-image"> <figure class="image is-4by3"> <%= attachment_image_tag @chinema, :chinema_image, fallback: "no-image.png" %> </figure> </div> <div class="card-content"> <div class="media"> <div class="media-content"> <p class="title is-4"><%= @chinema.chinema_name %> </p> </div> </div> <div class="content"> <table class="table is-narrow"> <tr> <th>感想</th> </tr> <tr> <td><%= simple_format @chinema.chinema_body %> </td> </tr> <tr> <td>いいね:</td> </tr> <tr> <td>投稿者:<%= @chinema.user.username %> </td> </tr> </table> <% if @chinema.user.id == current_user.id %> <%= link_to "編集画面へ", edit_chinema_path(@chinema), class: "button is-success" %> <% end %> </div> </div> </div> </div> <div class="card"> <div id="map"></div> <style> #map{ height: 550px; width: 600px; } </style> <script type="text/javascript"> function initMap() { var test ={lat: <%= @chinema.latitude %>, lng: <%= @chinema.longitude %>}; var map = new google.maps.Map(document.getElementById('map'), { zoom: 15, center: test }); var transitLayer = new google.maps.TransitLayer(); transitLayer.setMap(map); var contentString = '住所:<%= @chinema.address %>'; var infowindow = new google.maps.InfoWindow({ content: contentString }); var marker = new google.maps.Marker({ position:test, map: map, title: contentString }); marker.addListener('click', function() { infowindow.open(map, marker); }); } </script> <script async defer src="https://maps.googleapis.com/maps/api/js?v=3.exp&key=AIzaSyBkI_thGt1jmgpsYsGf_Yl4WazAuv95TTs&callback=initMap"> </script> <div class="content"> <table class="table is-narrow"> <tr> <td><p class="title is-6">住所</p></td> </tr> <tr> <td><p><%= @chinema.address %></p></td> </tr> </table> </div> </div> </section>

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

no1knows

2020/10/22 04:03 編集

> 投稿してもなにも表示されない。 > エラーがなにも出ない > chinema_nameカラムだけデータが表示される。 どこのページ(コントローラー・アクション)にどのように(スクリーンショットなど)と念の為routes.rbを追記すると回答が付きやすいかと思います。 ※質問を編集して追記ください。
gouf

2020/10/22 04:41

状況がよく分かりませんでした。create アクションで「binding.pry」をしていますが その影響とかではありませんか?
komati88

2020/10/22 13:38

返信ありがとうございます。、「binding.pry」をはずしてもデータは保存されませんでした。
guest

回答1

0

表現に厳密性がないのでいろんな解釈ができてしまい、回答しにくいのです。
投稿したものが表示されるには4つが成功しなければなりません

  1. formのデーターがcontrollerが期待している形で渡される
  2. controllerが「プログラマー」が期待した形でsaveする
  3. cntrollerからviewにデータが正しく渡される
  4. viewが正しく表示する

そのどこに問題があるのか、をつめないと解決しませんが、それができないのです。

質問の冒頭に
a 投稿してもなにも表示されない。
b エラーがなにも出ない
c chinema_nameカラムだけデータが表示される。

とありますが、aとcは矛盾しますね。
コメントへのレスポンスに「データは保存されませんでした」とありますがそれではcと矛盾しますね。
この辺りをでーたに基づいて正確に表現してください。
保存できたにせよできなかったにせよ、それをどうやって確認したのかも書いてください。

エスパー能力を最大限発揮すると。
saveはできている。しかし全部の項目がsaveされているわけではなく『今気にしている』項目はsaveできていなかった。
『今気にしている』項目は chinema_body,:address, :chinema_image
うち、前2つはsaveされてると思うが、要確認。
:chinema_imageはsaveされていないと思う、step1の問題

まず
saveされているのか居ないのか、いたらどういう値になっているのかdatabaseを確認する
saveが不完全だったらまず1を疑い、logで渡ってくるパラメーターを確認する

投稿2020/10/24 00:37

winterboum

総合スコア23567

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問