我正在尝试创建一个表单,它既可以更新'Invite‘,又可以添加一个新的'Guest’(嵌套表单)。“邀请‘has_many’来宾‘和’客人‘belong_to’邀请‘。我已经完成了accepts_nested_attributes_for的设置,但是我无法获得表单来添加一个新的‘来宾’。
目前,from 可以更新邀请,但只是指向“显示”视图,但是没有添加新的来宾记录。我不知道为什么。我觉得这和邀请‘更新’方法有关.
下面是一些代码:
邀请模特:
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我猜这和控制器方法有关,但我不知道是什么?
任何帮助都很感激..。
发布于 2015-01-14 15:25:25
首先,您需要将params声明移动到invite控制器,Rails 4打算将它们放在这里。
您的params将需要在一个params调用中接受嵌套属性。如果这让人困惑,请查看this SO question并查看如何嵌套这些属性的答案。
确保窗体也具有...fields_for :guests,作为您的邀请类has_many :guests
因此,您的invite_params实现可能最终看起来如下所示:
def invite_params
params.require(:invite).permit(:invite_code, :name, guests_attributes:[:name, :attendance_status, :starter, :main, :desert, :dietary_requirements])
end发布于 2015-01-14 15:19:06
你在使用Rails 4吗?如果是这样的话,请仔细阅读强参数。在你的邀请控制器里应该是这样的。
private
def invite_params
params.require(:invite).permit(:invite_code, :name, guests_attributes:[:name, :attendance_status, :starter, :main, :desert, :dietary_requirements])
endhttps://stackoverflow.com/questions/27946012
复制相似问题