gpt4 book ai didi

ruby-on-rails - 创建子错误后父变量消失了吗?

转载 作者:数据小太阳 更新时间:2023-10-29 08:47:27 24 4
gpt4 key购买 nike

我有以下模型用户、爸爸、妈妈和 child 。

class Dad
has_many :kids
end

class Mom
has_many :kids
end

class User
has_many :kids
end

class Kid
belongs_to :mom
belongs_to :dad
belongs_to :user
end

我想在爸爸和妈妈体内创建一个新的 Kid。

resources :dads
resources :moms
resources :kids
end
end

dads/1/moms/1/kids/new

# KidsController
def new
@dad = Dad.find(params[:dad_id])
@mom = Mom.find(params[:mom_id])
@kid = Kid.new
end

def create
@kid = current_user.kids.build(kid_params)

respond_to do |format|
if @kid.save
format.html { redirect_to @kid, notice: 'Kid was successfully created.' }
format.json { render action: 'show', status: :created, location: @kid }
else
format.html { render action: 'new' }
format.json { render json: @kid.errors, status: :unprocessable_entity }
end
end
end

在我看来,我有变量 @dad.name@mom.name 但是当创建 child 时发生错误时,我得到:

undefined method `name' for nil:NilClass

我相信这是因为我没有:

@dad = Dad.find(params[:dad_id])
@mom = Mom.find(params[:mom_id])

create 操作中,但这也不起作用。

Couldn't find Dad without an ID

那么我该如何纠正呢?

编辑

这是我的看法。

Kids/new.html.erb

<% provide(:title, "Adding New Kid for #{@dad.name.titleize} and #{@mom.name.titleize}") %>
<% page_header "Adding New Kid for #{@dad.name.titleize} and #{@mom.name.titleize}" %>

<%= form_for @kid do |f| %>
# kid fields
<% end %>

以及我如何获得 providepage_header

ApplicationHelper

def full_title(page_title)
base_title = "Kid Zone"
if page_title.empty?
base_title
else
"#{base_title} | #{page_title}"
end
end

def page_header(page_title)
content_for(:page_header) { page_title }
end

共享/page_header.html.erb

<div class="page-header">
<h3><%= yield(:page_header) %></h3>
</div>

layouts/application.html.erb

<head>
<title><%= full_title(yield(:title)) %></title>
</head>

回答

必须让我的 kid 表单成为:

 <%= form_for [@dad, @mom, @kid] do |f| %>
# kid fields
<% end %>

并添加到 create 操作,就像我的 new 操作一样:

@dad = Dad.find(params[:dad_id])
@mom = Mom.find(params[:mom_id])

最佳答案

编辑后的答案

由于其他一切都井井有条,并且有了表单的附加信息,您需要像应用中的其他一切一样为嵌套资源创建表单。所以当它失败时你不会丢失信息。

<%= form_for [@dad,@mom,@kid] do |f| %>
# kid fields
<% end %>

并且您肯定会在 create 函数中找到 @dad@mom,如 Uri Aggasi 所指定

关于ruby-on-rails - 创建子错误后父变量消失了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23446020/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com