よろしくお願いします。
rails初学者です。
railsで自作の牛群管理ウェブアプリを作っています。
牛の治療記録を個体ごとに管理するため、牛の個体管理をするモデルと治療記録を管理するモデルに1対多の関連付けを行い記録できるようにしたいのですが、うまくいきません。
個体管理のコントローラ(CowsController)のshowアクションで個体情報を表示し、情報の追加ボタンから治療記録を管理するコントローラ(TreatmentsController)のnewアクションに飛びます。
フォームに内容を記述しCreate Treatmentボタンでフォームの内容が追加されたCosControllerのshowアクションにリダイレクションしてほしいのですが、ボタンを押すとフォームに記述された内容をそのままにURLだけが変わってしまってしまいます。
createアクションに問題があるのかなと思いますが何が、どう問題で解決するにはどうすればいいかわからないです。
解決方法があったら教えていただきたいです。
treatments_controller.rb
ruby
1class TreatmentsController < ApplicationController 2 def new 3 @treat = Treatment.new(posted_at: Date.new(2010,1,1)) 4 end 5 6 def create 7 @treat = Treatment.new(params[:treatment]) 8 if @treat.save 9 redirect_to @cow, notice: "追加しました。" 10 render template:'cows/show' 11 else 12 render "new" 13 end 14 end 15 16end 17
treatments/new.html.erb
html
1<% @page_title = "新規情報の追加" %> 2 3<h1><%= @page_title %></h1> 4 5<td><%= link_to "詳細へ戻る", @cow %></td> 6 7<%= form_for @treat do |form| %> 8 <%= render "form", form: form %> 9 <div><%= form.submit %></div> 10<% end %> 11
treatments/_form.html.erb
html
1<table class = "form"> 2 <tr> 3 <th><%= form.label :posted_at, "日付" %></th> 4 <td><%= form.date_select :posted_at,start_year: 2010, end_year: Time.current.year, 5 use_month_numbers: true %></td> 6 7 <th>項目</th> 8 <td> 9 <%= form.select :content,["治療","受精","妊鑑","乾乳","分娩"] %> 10 </td> 11 </tr> 12 13 <tr> 14 <th>内容</th> 15 <td colspan = "3"><%= form.text_area :detail, size: "70*20" %></td> 16 </tr> 17</table>
cows/show.html.erb
html
1<% @page_title = "詳細" %> 2 3<h1><%= @page_title %></h1> 4 5<td><%= link_to "編集", [:edit, @cow] %>/ 6 <%= link_to "削除", @stall, method: :delete, 7 data: {confirm: "本当に削除しますか?" }%></td> 8<td><%= link_to "一覧へ戻る", :stalls%></td> 9 10<table class = "attr"> 11 <tr> 12 <th>個体識別番号</th> 13 <th>名号</th> 14 <th>生年月日</th> 15 <th>状態</th> 16 </tr> 17 <tr> 18 <td><%= @cow.number %></td> 19 <td><%= @cow.name %></td> 20 <td><%= @cow.birthday %></td> 21 <td><%= @cow.status == 1 ? "経産牛" : "未経産牛" %></td> 22 </tr> 23</table> 24 25<p><td><%= link_to "情報の追加", [:new, @cow, :treatment] %></td></p> 26 27 28 29 <% if @cow.treatments.present? %> 30 <% @cowtreat = @cow.treatments %> 31 <%= @cowinfo.each do |info| %> 32 <tr> 33 <th>日付</th> 34 <th>項目</th> 35 <th>内容</th> 36 </tr> 37 <tr> 38 <td><%= @cowtreat.posted_at %></td> 39 <td><%= @cowtreat.content %></td> 40 <td><%= @cowtreat.detail %></td> 41 </tr> 42 <% end %> 43 <% else %> 44 <p><td>情報はありません</td></p> 45 <% end %> 46 47
フォームを入力した際のログ
Started GET "/cows/13" for ::1 at 2019-12-02 12:48:51 +0900 Processing by CowsController#show as HTML Parameters: {"id"=>"13"} Cow Load (0.5ms) SELECT "cows".* FROM "cows" WHERE "cows"."id" = ? LIMIT ? [["id", 13], ["LIMIT", 1]] ↳ app/controllers/cows_controller.rb:4 Rendering cows/show.html.erb within layouts/application Treatment Load (0.3ms) SELECT "treatments".* FROM "treatments" WHERE "treatments"."cow_id" = ? [["cow_id", 13]] ↳ app/views/cows/show.html.erb:29 Rendered cows/show.html.erb within layouts/application (3.4ms) Completed 200 OK in 43ms (Views: 36.2ms | ActiveRecord: 0.8ms) Started GET "/cows/3" for ::1 at 2019-12-02 12:48:55 +0900 Processing by CowsController#show as HTML Parameters: {"id"=>"3"} Cow Load (0.4ms) SELECT "cows".* FROM "cows" WHERE "cows"."id" = ? LIMIT ? [["id", 3], ["LIMIT", 1]] ↳ app/controllers/cows_controller.rb:4 Rendering cows/show.html.erb within layouts/application Treatment Load (0.3ms) SELECT "treatments".* FROM "treatments" WHERE "treatments"."cow_id" = ? [["cow_id", 3]] ↳ app/views/cows/show.html.erb:29 Rendered cows/show.html.erb within layouts/application (3.2ms) Completed 200 OK in 47ms (Views: 38.3ms | ActiveRecord: 0.7ms) Started GET "/cows/3/treatments/new" for ::1 at 2019-12-02 12:55:27 +0900 Processing by TreatmentsController#new as HTML Parameters: {"cow_id"=>"3"} Rendering treatments/new.html.erb within layouts/application Rendered treatments/_form.html.erb (2.2ms) Rendered treatments/new.html.erb within layouts/application (10.2ms) Completed 200 OK in 58ms (Views: 51.0ms | ActiveRecord: 0.0ms) Started POST "/treatments" for ::1 at 2019-12-02 13:01:24 +0900 Processing by TreatmentsController#create as HTML Parameters: {"utf8"=>"✓", "authenticity_token"=>"DQujGE6hbli4AyRndCDXMAexcNWVHTE7cOYfoVVVvTS70QuhDKOIs6N48zWT2YITD39FrBalJ01tkjfaidgtXg==", "treatment"=>{"posted_at(1i)"=>"2010", "posted_at(2i)"=>"1", "posted_at(3i)"=>"1", "content"=>"治 療", "detail"=>"テスト"}, "commit"=>"Create Treatment"} (0.1ms) begin transaction ↳ app/controllers/treatments_controller.rb:8 (0.1ms) rollback transaction ↳ app/controllers/treatments_controller.rb:8 Rendering treatments/new.html.erb within layouts/application Rendered treatments/_form.html.erb (3.0ms) Rendered treatments/new.html.erb within layouts/application (10.9ms) Completed 200 OK in 57ms (Views: 49.5ms | ActiveRecord: 0.2ms)
よろしくお願いいたします。
2019.12.1 15:33追記
ruby
1class TreatmentsController < ApplicationController 2 def new 3 @treat = Treatment.new(posted_at: Date.new(2010,1,1)) 4 end 5 6 def create 7 @treat = Treatment.new(params.require(:treatment).permit(:posted_at, :content, :detail, :cow_id)) 8 if @treat.save 9 redirect_to @cow, notice: "追加しました。" 10 render template:'cows/show' 11 else 12 render "new" 13 end 14 end 15 16end 17
2019.12.2 20:20追記
編集後new.html.erb
html
1<% @page_title = "新規情報の追加" %> 2 3<h1><%= @page_title %></h1> 4 5<td><%= link_to "詳細へ戻る", @cow %></td> 6 7<%= form_for @treat do |form| %> 8<%= form.hidden_field :cow_id %> 9 <%= render "form", form: form %> 10 <div><%= form.submit %></div> 11<% end %> 12
2019.12.3 12:04追記
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/03 12:57
2019/12/03 12:59
2019/12/03 13:03
2019/12/04 04:24