簡體   English   中英

Rails:嵌套模型表單未創建記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM