我试图创建一个既可以更新'Invite'又可以添加一个新'Guest'(嵌套窗体)的窗体。邀请has_many'Guests'和'Guests'属于'Invites'。我已经设置了accepts_nested_attributes_for
,但我无法获得添加新“访客”的表单。Rails:嵌套模型表单不创建记录
目前的从可以更新邀请,但只是引导到“显示”的观点,但不添加新客户记录。我不知道为什么。我有一种感觉它有什么做的邀请 '更新' 的方法......
下面是一些代码:
邀请型号:
class Invite < ActiveRecord::Base
has_many :guests
def invite_params
def invite_params
params.require(:invite).permit(:invite_code, :name)
end
accepts_nested_attributes_for :guests
validates :invite_code, presence: true, numericality: true, length: { is: 4 }
validates :name, presence: true, length: { minimum: 5 }
end
游客型号:
class Guest < ActiveRecord::Base
belongs_to :invite
def guest_params
params.require(:guest).permit(:name, :attendance_status, :starter, :main, :desert, :dietary_requirements)
end
validates :name, presence: true, length: { minimum: 5 }
validates :attendance_status, presence: true
end
形式:
<%= form_for @invite, url: invite_path(@invite), method: :patch do |invite_form| %>
<p>
<%= invite_form.label :name %><br>
<%= invite_form.text_field :name %>
</p>
etc...
<%= invite_form.fields_for :guest do |guest_form| %>
<h3>Add a Guest</h3>
<p>
<%= guest_form.label :name %><br>
<%= guest_form.text_field :name %>
</p>
etc...
<% end %>
<%= invite_form.submit 'Update' %>
<% end %>
游客控制器:
class GuestsController < ApplicationController
def new
@invite = Invite.find(params[:invite_id])
@guest = @invite.guests.build
end
def create
@invite = Invite.find(params[:invite_id])
@guest = @invite.guests.create(guest_params)
redirect_to edit_invite_path(@invite)
end
etc...
邀请控制器:
def update
@invite = Invite.find(params[:id])
if @invite.update(invite_params)
redirect_to @invite
else
render 'edit'
end
end
我猜这是什么做的控制器的方法,但我无法弄清楚什么?
任何帮助赞赏...
你可以使用宝石nested_form或宝石茧 –