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

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

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

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

0回答

279閲覧

Railsアプリ開発で入力済みデータ修正機能を実装するときにCouldn't find Project with 'id'=というエラーが発生

noboru235

総合スコア12

Ruby

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

Linux

Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Debian

Debianは、Debian GNU/Linux などのOS(オペレーティングシステム)です。

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

0クリップ

投稿2018/05/19 07:13

編集2018/05/21 14:04

前提・実現したいこと

開発環境
・Rails 4.2.10
・Ruby 2.5.0
・rbenv 1.1.1-30-gc8ba27f
・sqlite3
・OS debian 9.4

Ruby on Railsでプロジェクト管理システムを作っています。
入力済みのプロジェクト概要情報(例、担当者)を変更する機能を追加しようとしています。
修正画面ダイアログを表示し、inputフォームに修正内容を記入、送信し、修正が反映されるシステムを作っています。
その際、idが引き渡せないという下記のエラーが発生します。

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

ActiveRecord::RecordNotFound in UpdateController#update Couldn't find Project with 'id'= Extracted source (around line #23): 22 def update 23 @project = Project.find(params[:id]) 24 if params[:mm] == 'y1801' 25 @project.y1801 = params[:money] 26 @project.y1801c1 = params[:m1] Rails.root: /home/“ユーザー名”/work/foo/internal-management-system Application Trace | Framework Trace | Full Trace app/controllers/update_controller.rb:23:in `update' Request Parameters: {"id"=>"", "edit_charge"=>"aa"}

該当のソースコード

app/controllers/update_controller.rb

class UpdateController < ApplicationController def edit @project = Project.find(params[:id]) if params[:charge] == 'charge' @project.charge = params[:charge] end @project.save redirect_to :root end def update @project = Project.find(params[:id]) if params[:mm] == 'y1801' @project.y1801 = params[:money] @project.y1801c1 = params[:m1] @project.y1801c2 = params[:m2] @project.y1801c3 = params[:m3] elsif params[:mm] == 'y1802' @project.y1802 = params[:money] @project.y1802c1 = params[:m1] @project.y1802c2 = params[:m2] @project.y1802c3 = params[:m3] (中略、elsifの繰り返し。) else if params[:charge]=='charge' @project.charge = params[:charge] end end @project.save redirect_to :root end end

app/views/read.html.erb

<div class="container"> <div class="starter-template"> <h3>PJ管理表</h3> </div> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#addmodal">追加</button> <br> <!--Project Add Modal --> <div class="modal fade" id="addmodal" role="dialog"> <div class="modal-dialog"> <!-- Modal content--> <div class="modal-content"> <form action="/insert/insert"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">&times;</button> <h4 class="modal-title">PJ追加画面</h4> </div> <div class="modal-body"> (中略) </div> <table class="table table-striped table-bordered table-hover table-responsive" id="table"> <thead> <tr> <th class="text-center">編集</th> <th class="text-center">削除</th> <th class="text-center">No. <%= link_to "▼", sort: "no" %> </th> <th class="text-center">お客様 <%= link_to "▼", sort: "company" %> </th> <th class="text-center">担当 <%= link_to "▼", sort: "charge" %> </th> (中略) <th class="text-center">合計(百万円)</th> <th class="text-center">18/01</th> (中略) <th class="text-center">18/12</th> </tr> </thead> <tbody> <% @projects.each do |p| %> <tr> <td class="text-center"><a data-toggle="modal" href="#editModal" data-id=<%=p.id%> data-edit_charge =<%= p.charge%> >編集</a></td> <td class="text-center"><a data-toggle="modal" href="#delModal" data-id=<%=p.id%> >削除</a></td> <td class="text-right"><a data-toggle="modal" href="#outline" data-id=<%=p.no%> ><%= p.no %></a></td> <td clsss="text-left"><%= p.company %></td> <td class="text-left"><a data-toggle="modal" href="#progress_charge" data-id=<%=p.charge%> ><%= p.charge %></td> <td class="text-left"><a data-toggle="modal" href="#progress" data-id=<%=p.task%> ><%= p.task %></td> <td class="text-left"><%= p.level %></td> <td><%= p.y1801+p.y1802+p.y1803+p.y1804+p.y1805+p.y1806+p.y1807+p.y1808+p.y1809+p.y1810+p.y1811+p.y1812 %></td> <td class="text-right"><a data-toggle="modal" href="#myModal" data-id=<%=p.id%> data-mm="y1801"><%= p.y1801 %></a></td> (中略) <td class="text-right"><a data-toggle="modal" href="#myModal" data-id=<%=p.id%> data-money=<%=p.y1812%> data-m1=<%=p.y1812c1%> data-m2=<%=p.y1812c2%> data-m3=<%=p.y1812c3%> data-mm="y1812"><%= p.y1812 %></a></td> </td> </tr> <% end %> <td colspan="8" align="right"> 月ごとの合計(百万円) </td> <td align="right"><%=@total_y1801 %></td> (中略) <td align="right"><%=@total_y1812 %></td> </tbody> </table> <!-- Money, Event Add Modal --> <div class="modal fade" id="myModal" role="dialog"> <div class="modal-dialog"> <!-- Modal content--> <div class="modal-content"> <form action="/update/update"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">&times;</button> <h4 class="modal-title">金額を記入してください</h4> </div> <div class="modal-body"> <input type="hidden" id="id" name="id" value =""> <input type="hidden" id="mm" name="mm" value =""> <div class="form-group"> <p>1. 金額(百万円)を入力してください。</p> <input type="text" id="money" name="money" value="" class="form-control"> <br> </div> <div class="modal-footer"> <button type="submit" class="btn btn-success">保存</button> <button type="button" class="btn btn-default" data-dismiss="modal">閉じる</button> </div> </form> </div> </div> </div> <!--Modal Project(outline)--> <div class="modal fade" id="outline" role="dialog"> (中略) </div> <!--Edit content--> <div class="modal fade" id="editModal" role="dialog"> <div class = "model-dialog"> <!-- Modal content--> <div class="modal-content"> <form action="/update/update" class="form-group"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">&times;</button> <h4 class="modal-title">Edit</h4> <p>PJ編集</p> </div> <div class-"modal-body"> <input type="hidden" id = "id" name="id" class="form-control"> <div class="form-group"> <p>担当編集</p> <input type="text" id="edit_charge" name="edit_charge" value="" class="form-control"> <br> </div> </div> <div class="modal-footer"> <button type="submit" class="btn btn-success">保存</button> <button type="button" class="btn btn-default" data-dismiss="modal">閉じる</button> </div> </form> </div> </div> </div> <!-- delete Modal --> <div class="modal fade" id="delModal" role="dialog"> <div class="modal-dialog"> <!-- Modal content--> <div class="modal-content"> <form action="/delete/delete"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">&times;</button> <h4 class="modal-title">本当に削除しますか?</h4> </div> <div class="modal-body"> <input type="hidden" id="id" name="id" value =""> </div> <div class="modal-footer"> <button type="submit" class="btn btn-success">はい</button> <button type="button" class="btn btn-default" data-dismiss="modal">いいえ</button> </div> </form> </div> </div> </div> <!--Progress content--> <div class="modal fade" id="progress" role="dialog"> (中略) </div> <!--per Charge content--> <div class="modal fade" id="progress_charge" role="dialog"> (中略) </div> <script> $('#myModal').on('show.bs.modal', function (event) { var button = $(event.relatedTarget) var idTxt = button.data('id') var mmTxt = button.data('mm') var moneyTxt = button.data('money') var modal = $(this) modal.find('.modal-body input#id').val(idTxt) modal.find('.modal-body input#mm').val(mmTxt) }); $('#editModal').on('show.bs.modal', function (event) { var button = $(event.relatedTarget) var idTxt = button.data('id') var chargeTxt = button.data('charge') var modal = $(this) console.log(idTxt) modal.find('.modal-body input#id').val(idTxt) modal.find('.modal-body input#charge').val(chargeTxt) }); function comma(str) { return str.replace(/(\d)(?=(?:\d{3})+(?!\d))/g, '$1,'); } $('#delModal').on('show.bs.modal', function (event) { (中略) }); //iconsole.log(idTxt); </script> </div><!-- /.container -->

試したこと

・update_controller.erbにdef update1に記載した。
->routesが定義されていないとメッセージが出る。

・def editに追記した。
->defaultのedit画面に遷移した。

・read_controller.erbのid入力フォームの<input type=”hidden”~~ >のhiddenをtextにし、idを手打ちで入力すると、エラーが発生しない。しかし修正内容も反映されない。

<div class="modal fade" id="editModal" role="dialog"> <div class = "model-dialog"> (中略) <input type="hidden" id = "id" name="id" class="form-control">

・rails consoleに以下のコマンドを入力すると、正常に変更が反映される。
sqlite> update "projects" set "charge"='test' where id=22;
(補足情報  charge:プロジェクト担当者の氏名)

・Google Chromeの開発コンソールで、JavaScript部にbreakpointを設定し、格納されている変数を確認したところ、idの有意な値(例、22)が格納されていた。

補足情報

・金額入力画面ダイアログ(<div class=”modal fade” id=”myModal” role-“dialog”>で定義される領域)は、金額を送信・反映できるます。

追加情報

Modelファイルの情報を追加します。
user.rb

class User < ActiveRecord::Base end

project.rb

class Project < ActiveRecord::Base def self.search(search) if search Project.where(['name LIKE ?', "%#{search}%"]) else Project.all end end end

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

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

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

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

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

IPU

2018/05/21 08:42

modelの情報も載せてくれませんか?
noboru235

2018/05/21 14:04

IPUさま、ありがとうございます。Modelの情報(user.rbとproject.rb)を記載しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問