首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails:嵌套模型表单不创建记录

Rails:嵌套模型表单不创建记录
EN

Stack Overflow用户
提问于 2015-01-14 15:05:46
回答 2查看 589关注 0票数 2

我正在尝试创建一个表单,它既可以更新'Invite‘,又可以添加一个新的'Guest’(嵌套表单)。“邀请‘has_many’来宾‘和’客人‘belong_to’邀请‘。我已经完成了accepts_nested_attributes_for的设置,但是我无法获得表单来添加一个新的‘来宾’。

目前,from 可以更新邀请,但只是指向“显示”视图,但是没有添加新的来宾记录。我不知道为什么。我觉得这和邀请‘更新’方法有关.

下面是一些代码:

邀请模特:

代码语言:javascript
复制
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

客座模特:

代码语言:javascript
复制
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

表格:

代码语言:javascript
复制
<%= 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 %>

客座控制员:

代码语言:javascript
复制
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...

邀请控制器:

代码语言:javascript
复制
def update
 @invite = Invite.find(params[:id])

 if @invite.update(invite_params)
   redirect_to @invite
 else
   render 'edit'
 end
end

我猜这和控制器方法有关,但我不知道是什么?

任何帮助都很感激..。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-14 15:25:25

首先,您需要将params声明移动到invite控制器,Rails 4打算将它们放在这里。

您的params将需要在一个params调用中接受嵌套属性。如果这让人困惑,请查看this SO question并查看如何嵌套这些属性的答案。

确保窗体也具有...fields_for :guests,作为您的邀请类has_many :guests

因此,您的invite_params实现可能最终看起来如下所示:

代码语言:javascript
复制
def invite_params
  params.require(:invite).permit(:invite_code, :name, guests_attributes:[:name, :attendance_status, :starter, :main, :desert, :dietary_requirements])
end
票数 3
EN

Stack Overflow用户

发布于 2015-01-14 15:19:06

你在使用Rails 4吗?如果是这样的话,请仔细阅读强参数。在你的邀请控制器里应该是这样的。

代码语言:javascript
复制
private

  def invite_params
    params.require(:invite).permit(:invite_code, :name, guests_attributes:[:name, :attendance_status, :starter, :main, :desert, :dietary_requirements])
  end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27946012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档