前提・実現したいこと
edit.htmlでレコードの登録・編集をするため、入力したパラメータをupdateメソッドに渡したい。
(更新ボタンを押した時)
また、作成したフォームに正しくレコードを表示させたい
####使用するテーブル
登録更新するテーブル -> sales カラム project_id,(projectテーブルと1対多の関係。salesが多。) monthly_amount(月ごとの金額) sales_date(日付) year(年度)
###状況
お世話になります。初teratailでの質問です。
現在、会社の売り上げを管理する表をRuby on Railsで作成しています(画像参照)。
左側はProjectモデルのインスタンスで作成した表示テーブルです。
それぞれのセルが入力フィールドになっており、画像にはありませんが更新ボタンを押すと
createまたはupdateを行い、editへリダイレクト後、入力した金額が入力した場所に表示されているというものを目標にしています。
1つのプロジェクトごとに4月〜12月まで入力欄があります。
f.submitボタンを実装し、押下するも、入力したパラメータが渡ってこず、
またform_for外、button_toでparamsを指定してみましたがなかなかうまくパラメータを渡せず困っています。
(debuggerで確認)
こういった場合の資料がなかなか見つからず、こちらに質問させていただきました。
またテーブル(画面の)の作成についてなど、ご指摘があれば大変ありがたいです。
宜しくお願い致します。
###該当のソースコード
ruby
1#routes.rb 2 3Rails.application.routes.draw do 4 resources :sales, param: :year, only: [:edit, :update] 5end 6
ruby
1#sales/edit.html.erb 2 3 <div class = 'sales-table-amount'> 4 <table class = 'sales-table'> 5 <tr> 6 <% n = 4 %> 7 <% 12.times do %> 8 <%= content_tag :th, "#{n}月", class: 'sales-th' %> 9 <% if n == 12 %> 10 <% n = 1 %> 11 <% else %> 12 <% n += 1 %> 13 <% end %> 14 <% end %> 15 </tr> 16 17 <%# プロジェクトidを付与するため %> 18 <% @projects.each do |project| %> 19 <tr> 20 <%# 12ヶ月分繰り返す %> 21 <% n = 4 %> 22 <% 12.times do %> 23 <%# --------------------------渡したいパラメータ---------------------------- %> 24 <%= form_for @sales, url: edit_sales_path(params[:year]) do |f| %> 25 <td class = 'sales-td'><%= f.text_field :monthly_amount, class:'sales-td', id: 'sales-numeral', 26 name: 'monthly_amount', style: 'border: none;', autocomplete: 'off', size: 11 %></td> 27 <%= f.hidden_field :project_id, value: project.id %> 28 <% if n > 3 %> 29 <%= f.hidden_field :sales_date, value: "#{params[:year]}/#{n}/01".to_date %> 30 <% else %> 31 <%= f.hidden_field :sales_date, value: "#{params[:year].to_i + 1}/#{n}/01".to_date %> 32 <% end %> 33 <%= f.hidden_field :year, value: params[:year] %> 34 <%# --------------------------渡したいパラメータ---------------------------- %> 35 <% if n == 12 %> 36 <% n = 1 %> 37 <% else %> 38 <% n += 1 %> 39 <% end %> 40 <% end %> 41 <% end %> 42 </tr> 43 <% end %> 44 </table> 45 </div> 46
ruby
1#sales_controller.rb 2 3class SalesController < ApplicationController 4 5 def edit 6 @projects = Project.all 7 @sales = Sales.all 8 end 9 10 def update 11 # 更新処理はまだ未記載 12 #paramsはここにdebuggerを挿して確認 13 redirect_to sales_path(params[:year]) 14 end 15 16end 17
試したこと
@salesをeachで回して、fields_for使いテキストフィールドを作成。
f.submi, submit_tag, link_to, button_to などそれぞれ試す。
など。
補足情報(FW/ツールのバージョンなど)
Rails 5.1.6
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/09/13 17:03
2019/09/13 22:53