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

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

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

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

RubyMine

RubyMineは、Ruby/Ruby on RailsベースのWebアプリケーション開発を行うためのIDEです。コードエディタやコードアシスタンス、グラフィカルなデバッガを搭載しており、様々なバージョン管理システムに対応しています。

解決済

投稿内容を編集するとエラーが起きる

yuu0000
yuu0000

総合スコア4

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

RubyMine

RubyMineは、Ruby/Ruby on RailsベースのWebアプリケーション開発を行うためのIDEです。コードエディタやコードアシスタンス、グラフィカルなデバッガを搭載しており、様々なバージョン管理システムに対応しています。

2回答

0リアクション

0クリップ

1108閲覧

投稿2021/05/15 09:28

投稿内容を編集しようとするとパラメーターが無いとエラーが生じる

現在、投稿内容を編集する機能を作成しているのですが、投稿内容を編集しようとすると下記のようなエラーが起きる。

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

ActionController::ParameterMissing in UploadsController#update param is missing or the value is empty: upload_form Did you mean? upload id controller _method Extracted source (around line #58): 56 57 58 59 60 def upload_params params.require(:upload_form).permit(:title, :text, :url, :working_day, :day_off, :cafe_wifi_id, :cafe_charging_id, :cafe_smoking_id, :image, :name).merge(user_id: current_user.id)⇦この部分 end end Extracted source (around line #34): 32 33 34 35 36 37 def update @upload = Upload.find(params[:id]) @upload_form = UploadForm.new(upload_params, upload: @upload)⇦この部分 tag_list = params[:upload][:name].split(",") if @upload_form.valid? @upload_form.save(tag_list)

formオブジェクトを用いて編集機能を作成しているため、モデルの処理などはupload_form.rbというファイルに作成しております。

該当するエラー部分に関するコードなどを確認してみましたが、どの部分を修正する必要があるのか原因が掴めない状況です。

エラーに関する原因やヒントなどをご教授願えますでしょうか。

該当のソースコード

app/views/uploads/edit.html.erb

erb

<%= render "shared/header" %> <div class="upload-form-contents"> <div class="upload-form"> <h2 class="upload-form__title">カフェの情報を編集</h2> <%= form_with(model: @upload_form, url: upload_path, local: true) do |f| %> <%# カフェ画像 %> <div class="img-upload"> <div class="upload-text"> カフェの画像 <span class="important">必須</span> </div> <div class="click-upload"> <p> クリックしてファイルをアップロード </p> <%= f.file_field :image, id: "item-image" %> </div> </div> <%# カフェ名とカフェの説明%> <div class="cafe-item"> <div class="upload-text"> カフェ名 <span class="important">必須</span> </div> <%= f.text_area :title, class: "cafe-text", id: "uploads-name", placeholder: "カフェ名 (必須 40字まで)", maxlength: "40" %> <div class="cafe-explain"> <div class="upload-text"> カフェの説明 <span class="important">必須</span> </div> <%= f.text_area :text, class: "cafe-text", id: "cafe-info", placeholder: "カフェの説明 (必須 1000字まで) こちらのカフェでは充電はもちろんのことwifiまで完備されているので,外で作業をする人におすすめです。", rows: "7", maxlength: "1000" %> </div> <div class="upload-tag"> <div class="upload-text"> タグ <span class="important">必須</span> </div> <%= f.text_field :name, class: "uploads-field", id: "cafe-tag", placeholder: "タグを入力。複数の場合は,で区切る", maxlength: "20" %> </div> <div class="upload-text"> URL </div> <%= f.text_field :url, class: "uploads-field", id: "cafe-url", placeholder: "カフェのURL", maxlength: "60" %> <div class="upload-text"> 営業時間 </div> <%= f.text_field :working_day, class: "uploads-field", id: "cafe-working_day", placeholder: "平日10:00~20:00 土日祝9:00~20:00", maxlength: "60" %> <div class="upload-text"> 定休日 </div> <%= f.text_field :day_off, class: "uploads-field", id: "cafe-day-off", placeholder: "火曜日", maxlength: "60" %> </div> <%# カフェの詳細%> <div class="upload-detail"> <div class="upload-text">カフェの詳細</div> <div class="upload-form-detail"> <div class="upload-text"> 店内のwifi <span class="important">必須</span> </div> <%= f.collection_select(:cafe_wifi_id, CafeWifi.all, :id, :name, {}, { class: "select-box", id: "uploads-cafe-wifi" }) %> <div class="upload-text"> 充電コンセント <span class="important">必須</span> </div> <%= f.collection_select(:cafe_charging_id, CafeCharging.all, :id, :name, {}, { class: "select-box", id: "uploads-cafe-charging" }) %> <div class="upload-text"> 喫煙について <span class="important">必須</span> </div> <%= f.collection_select(:cafe_smoking_id, CafeSmoking.all, :id, :name, {}, { class: "select-box", id: "uploads-cafe-smoking" }) %> </div> </div> <%# 投稿ボタン %> <div class="upload-btn-contents"> <%= f.submit "更新する", class: "uploads-form-btn" %> <%= link_to 'トップページへ', root_path, class: "back-btn" %> </div> <% end %> </div> </div>

app/models/upload_form.rb

model

class UploadForm include ActiveModel::Model attr_accessor :title, :text, :url, :working_day, :day_off, :cafe_wifi_id, :cafe_charging_id, :cafe_smoking_id, :user_id, :image, :name with_options presence: true do validates :title validates :text validates :cafe_wifi_id validates :cafe_charging_id validates :cafe_smoking_id validates :user_id validates :image validates :name validates :upload_id, presence: true validates :tag_id, presence: true end with_options numericality: { other_than: 0 } do validates :cafe_wifi_id validates :cafe_charging_id validates :cafe_smoking_id end delegate :persisted?, to: :upload def initialize(attributes = nil, upload: Upload.new) @upload = upload attributes ||= default_attributes super(attributes) end def save(tag_list) ActiveRecord::Base.transaction do @upload.update(title: title, text: text, url: url, working_day: working_day, day_off: day_off, cafe_wifi_id: cafe_wifi_id, cafe_charging_id: cafe_charging_id, cafe_smoking_id: cafe_smoking_id, user_id: user_id, image: image) @upload.upload_tags_relation.each do |tag| tag.delete end tag_list.each do |tag_name| tag = Tag.where(name: tag_name).first_or_initialize tag.save upload_tag_relation = UploadTagRelation.where(upload_id: upload.id, tag_id: tag.id).first_or_initialize upload_tag_relation.update(upload_id: upload.id, tag_id: tag.id) end end # upload = Upload.create(title: title, text: text, url: url, working_day: working_day, day_off: day_off, cafe_wifi_id: cafe_wifi_id, cafe_charging_id: cafe_charging_id, cafe_smoking_id: cafe_smoking_id, user_id: user_id, image: image) # map = Map.create(address: address, latitude: latitude, longitude: longitude, upload_id: upload_id) end def to_model upload end private attr_reader :upload def default_attributes { title: upload.title, text: upload.text, url: upload.url, working_day: upload.working_day, day_off: upload.day_off, cafe_wifi_id: upload.cafe_wifi_id, cafe_charging_id: upload.cafe_charging_id, cafe_smoking_id: upload.cafe_smoking_id, image: upload.image, name: upload.tags.pluck(:name).join(",") } end end

app/controllers/uploads_controller

controller

class UploadsController < ApplicationController def index @uploads = Upload.all.order(created_at: :desc) @tag_list = Tag.all end def new @upload_form = UploadForm.new end def create @upload_form = UploadForm.new(upload_params) tag_list = params[:upload_form][:name].split(",") if @upload_form.valid? @upload_form.save(tag_list) redirect_to root_path else render new end end def show @upload = Upload.find(params[:id]) @tag = @upload.tags end def edit @upload = Upload.find(params[:id]) @upload_form = UploadForm.new(upload: @upload) end def update @upload = Upload.find(params[:id]) @upload_form = UploadForm.new(upload_params, upload: @upload) tag_list = params[:upload][:name].split(",") if @upload_form.valid? @upload_form.save(tag_list) redirect_to upload_path(@upload.id) else render :edit end end def destroy @upload = Upload.find(params[:id]) @upload.image.purge if @upload.image.attached? if @upload.destroy redirect_to root_path else render :show end end private def upload_params params.require(:upload_form).permit(:title, :text, :url, :working_day, :day_off, :cafe_wifi_id, :cafe_charging_id, :cafe_smoking_id, :image, :name).merge(user_id: current_user.id) end end

試したこと

・paramsが取得できていないことが原因なので、edit,updateアクションのコードに不足がないか確認してみたが、この部分にエラーが発生するコードがあるとは考えずらかった。
・formオブジェクト内の記述に原因がないか確認してみたところ、saveアクションの中に必要な処理は記述されていた。
・edit.html.erbのform_with modelの記述に問題がないか確認してみたが原因が掴めなかった。

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

開発環境
・rubymine
・ruby(3.0.1)
・Ruby on rails (6.1.3.1)
Githubのリポジトリ
https://github.com/yuuffff1212/locat

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

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

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

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

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

Ruby

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

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Ruby on Rails

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

RubyMine

RubyMineは、Ruby/Ruby on RailsベースのWebアプリケーション開発を行うためのIDEです。コードエディタやコードアシスタンス、グラフィカルなデバッガを搭載しており、様々なバージョン管理システムに対応しています。