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

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

ただいまの
回答率

90.49%

  • Ruby

    7685questions

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

  • Linux

    3780questions

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

  • Ruby on Rails 4

    2438questions

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

  • Bootstrap

    965questions

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

  • Debian

    119questions

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

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

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 155

noboru235

score 4

 前提・実現したいこと

開発環境
・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
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

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

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • IPU

    2018/05/21 17:42

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

    キャンセル

  • noboru235

    2018/05/21 23:04

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

    キャンセル

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

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

  • ただいまの回答率 90.49%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • Ruby

    7685questions

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

  • Linux

    3780questions

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

  • Ruby on Rails 4

    2438questions

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

  • Bootstrap

    965questions

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

  • Debian

    119questions

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

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