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

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

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

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

Q&A

解決済

1回答

693閲覧

formに入力したデータが保存されていない 画像投稿アプリの作成

退会済みユーザー

退会済みユーザー

総合スコア0

Ruby on Rails

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

0グッド

0クリップ

投稿2020/11/08 06:59

編集2020/11/09 12:48

form_forで作成したfile_field(画像用)とtext_area(content用)に内容を入力して保存したのですが、保存されていないのか画像とtext_areaに入力した内容が描画されず空の投稿と削除のリンクのみ描画されてしまいます。
デベロッパーツールで確認してもcontentの中身は空で、画像の方は後置ifで画像データが無い場合は描画されないようにしているのでそちらは描画自体されていません。

画像投稿用のcreateアクションが入っているcontroller

画像投稿用のcreate class PhotopostsController < ApplicationController before_action :authenticate_user!, only: [:create, :destroy] before_action :correct_user, only: :destroy def create @photopost = current_user.photoposts.build(photopost_params) if @photopost.save flash[:success] = "画像が投稿できました!" redirect_to mypage_url(current_user) else end end def destroy @photopost.destroy flash[:success] = "投稿を削除しました" redirect_to request.referrer || root_url end private def photopost_params params.require(:photopost).permit(:content, :picture) end def correct_user @photopost = current_user.photoposts.find_by(id: params[:id]) redirect_to root_url if @photopost.nil? end end

画像投稿用のパーシャル

<%= form_for(@photopost) do |f| %> <span class="picture"> <%= f.file_field :picture %> </span> <div class="field"> <%= f.text_area :content, placeholder: "コメントの追加" %> </div> <%= f.submit "投稿", class: "btn btn-success" %> <% end %>

保存された画像とcontentを描画するパーシャル

<li id="photopost-<%= @photopost.id %>"> <%= link_to gravatar_for(@photopost.user, size: 50) %> <span class="user"><%= link_to @photopost.user.name, photopost_path %></span> <span class="content"> <%= image_tag @photopost.picture.url if @photopost.picture? %> <%= @photopost.content %> </span> <span class="timestamp"> <%= link_to "削除", photopost, method: :delete, data: { confirm: "You sure?" } %> </span> </li>

描画するviewを呼ぶcontrollerのmethod  ← 2)の追加部分です

class MypagesController < ApplicationController def index @users = User.all end def show @user = User.find(params[:id]) @photopost = current_user.photoposts.build @myphotopost = @user.photoposts ←実はこの部分で本来は@photopostとしたかったのですが、1行上の end                     @photopostと名前がかぶってしまいそうするとform_forが                         数値を拾わなくなってしまい入力フォームを描画してくれないので end                       別の名前のインスタンス変数に入れ直そうとした為変になっています

Photopostモデル

class Photopost < ApplicationRecord belongs_to :user mount_uploader :picture, PictureUploader validates :user_id, presence: true validates :picture, presence: true validates :content, presence: true end

Userモデル

class User < ApplicationRecord # Include default devise modules. Others available are: # :confirmable, :lockable, :timeoutable, :trackable and :omniauthable has_many :photoposts, dependent: :destroy devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable, :omniauthable def self.find_for_oauth(auth) user = User.where(uid: auth.uid, provider: auth.provider).first unless user user = User.create( uid: auth.uid, provider: auth.provider, email: auth.info.email, name: auth.info.name, password: Devise.friendrly_token[0, 20], image: auth.info.image ) end user end end

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

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

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

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

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

winterboum

2020/11/08 13:48

1) 「描画するパーシャル」はどのviewから呼ばれますか? 2) そのviewを呼ぶcontrollerのmethod(アクション)のcodeを載せてください 3) image_tag @myphotopost とありますが、これはimage_tag @photopost のまちがい?
退会済みユーザー

退会済みユーザー

2020/11/08 21:35

1) /insta_clone/app/views/photoposts/_photopost.html.erb から呼ばれています。 2) 質問内容編集して追記しているので確認してもらえるとありがたいです。汗 3) 間違いだった為こちらも質問内容修正してあります。
winterboum

2020/11/08 23:13

保存されていない なのですか? 保存されているが表示されなのですか? 質問のタイトルが前者ですからそのつもりで考えています。 1)はそれもpartialなのでベースとなるviewを教えてください。もしかしてshow? 2)はshowのmethosがでてますが、それで新規photopostのpstするのですか? 標準と違う構成で作るのは構いませんがそれが回答者に伝わるように書いていただかないとこちら混乱するばかりです
退会済みユーザー

退会済みユーザー

2020/11/09 08:15

保存されていないの解釈であっています! 知識不足で文が変になってしまい申し訳ありません汗 1)についてshowがベースのviewになっています。 2)についてなのですが、photopost用のコントローラーを作っていてその中にcreateメソッドがありそちらでポストしています。 showの方は表示させるために@photopostに@user.photopostsを入れているという感じです汗
winterboum

2020/11/09 09:40

という構成であるとすると、載っているcodeではsaveはできるのでは、、、 Photopost のcodeとUserの関連定義を載せていただけますか
退会済みユーザー

退会済みユーザー

2020/11/09 13:11

関連定義とはモデルの多対一のような関係を表すコードで合っていますでしょうか? Userと Photopostのモデルを追記してるあるのですみませんがみてもらえるとありがたいです汗
退会済みユーザー

退会済みユーザー

2020/11/09 13:34

Railsチュートリアルのマイクロポストの画像投稿機能を元にして、投稿用のviewと投稿した画像を表示するviewを別々にしてコントローラーなどもそれに合わせて変更したら保存されて画像とコンテントを描画することができました! 今回の詳しい原因はわからなかったのですが、もう少しMVCを理解してから次のアプリは開発しようと思います。 winterboumさん、私の知識不足で変な質問をしてしまいすみませんでした色々と教えてもらって本当にありがとうございます!
guest

回答1

0

ベストアンサー

元々showのページで画像投稿機能と投稿された画像を表示するように実装しようとしていたのですが、Railsチュートリアルを基にしてLPをログイン状態の場合は画像投稿のviewにするようにして、showのviewは投稿された画像と入力した文章を表示するようにしたことで無事に保存されて描画することができました。

投稿2020/11/09 13:37

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

winterboum

2020/11/09 13:49

特になにかあれば別ですが、標準でやるのがなにかと良いです。特にはじめのうちは
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問