お世話になります。
Ruby on Rails(5.0.6)で、1つのフォームで親子関係(1:多)のモデルの項目を展開し、POSTによって親と子両方のレコードを追加(または更新)しようとしています。
親項目
├子1
├子2
├子3
・・・
画面表示、strong parameterによる受け取りなど、とても苦労してやっと出来ました。。。
ところが、save時に子->親の参照キー(当例では「job_id」)に値が入らないせいか、Columns job must exist
とエラーになってしまいます><
あと一歩で完成なのですが、どう調べても分かりません。。。
アドバイス頂けると嬉しいです。よろしくお願いします!
models
job.rb
class Job < ApplicationRecord has_many :columns, :dependent => :destroy accepts_nested_attributes_for :columns, :allow_destroy => true end
column.rb
class Column < ApplicationRecord belongs_to :job end
migrate files
class CreateJobs < ActiveRecord::Migration[5.0] def change create_table :jobs do |t| t.string :name t.timestamps end end end
class CreateColumns < ActiveRecord::Migration[5.0] def change create_table :columns do |t| t.references :job, foreign_key: true t.string :name t.timestamps end end end
controller
jobs_controller.rb
class JobsController < ApplicationController def new @job = Job.new 3.times {|i| @job.columns.build(name:"name#{i}") } end def create @job = Job.new(job_params) if @job.save # 成功時の処理 else render 'new' end end private def job_params params.require(:job).permit(:name, :format, :char_code, columns_attributes: [:id, :name, :data_type]) end end
view
new.html.erb
<div class="row"> <%= form_for(@job, html: {class: 'form-horizontal'}) do |f| %> <div class="form-group"> <%= f.label :name, class: 'col-md-2 control-label' %> <div class="col-md-10"> <%= f.text_field :name, class: 'form-control' %> </div> </div> <div class="form-group"> <div class="col-md-10 col-md-offset-2"> <%= f.submit "save", class: "btn btn-primary" %> </div> </div> <div class="form-group"> <%= f.fields_for :columns do |builder| %> <%= render 'column_fields', :f => builder %> <% end %> </div> <% end %> </div>
_column_fields.html.erb
<div> <%= f.text_field :id %> <%= f.text_field :job_id %> <%= f.text_field :name %> </div>
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/09/26 07:54
2017/09/26 08:14
2017/09/26 08:40
2017/09/26 09:25