[英]Rails: Nested model form not creating record
我正在嘗試創建一個既可以更新“邀請”又可以添加新的“來賓”(嵌套表單)的表單。 “邀請”具有多個“來賓”和“來賓”屬於“邀請”。 我已經完成了accepts_nested_attributes_for
設置,但無法獲得添加新“來賓”的表單。
目前,發件人可以更新“邀請”,而只是直接轉到“顯示”視圖,而不會添加新的來賓記錄。 我不知道為什么。 我覺得這與邀請'更新'方法有關...
這是一些代碼:
邀請模型:
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
我猜想這與控制器方法有關,但我不知道是什么?
任何幫助表示贊賞...
首先,您需要將params聲明移至邀請控制器,Rails 4打算將其聲明為。
您的參數將需要在單個params調用中采用嵌套屬性。 如果這令人困惑,請查看此SO問題,並在答案中查看如何嵌套這些屬性。
確保您的表單也具有...fields_for :guests
,因為您的Invite類has_many :guests
因此,您的Invitation_params實現可能最終看起來像這樣:
def invite_params
params.require(:invite).permit(:invite_code, :name, guests_attributes:[:name, :attendance_status, :starter, :main, :desert, :dietary_requirements])
end
您在使用Rails 4嗎? 如果是這樣,請閱讀強參數。 在您的邀請控制器中應該看起來像這樣。
private
def invite_params
params.require(:invite).permit(:invite_code, :name, guests_attributes:[:name, :attendance_status, :starter, :main, :desert, :dietary_requirements])
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.