gpt4 book ai didi

ruby-on-rails - Rails 4 嵌套表单 Simple_form_for 和 simple_field_for

转载 作者:太空宇宙 更新时间:2023-11-03 18:15:32 24 4
gpt4 key购买 nike

我只是想生成一个简单的嵌套表单,如下所示:

<%= simple_form_for @profile do |f| %>
<%= f.input :first_name %>
<%= f.input :last_name %>
<%= f.input :phone_number %>
<%= f.simple_fields_for :addresses do |p| %>
<%= p.input :street %>
<%= p.input :city %>
<%= p.input :state, collection: us_states %>
<%= p.input :zip_code %>
<% end %>
<%= f.button :submit %>

我的模型:

class Profile < ActiveRecord::Base
belongs_to :customer
has_many :addresses
accepts_nested_attributes_for :addresses
end

class Address < ActiveRecord::Base
belongs_to :profile
end

我的 Controller :

class ProfilesController < ApplicationController
before_action :authenticate_customer!

def new
@profile = Profile.new
end
end

不幸的是嵌套属性addresses不会在页面上填充任何内容,我希望看到像 street 这样的字段或 city但我什么也没得到。

但是,如果我改变 <%= f.simple_fields_for :addresses do |p| %><%= f.simple_fields_for :address do |p| %>字段显示正确。

不幸的是,这样做会导致问题,因为我无法使用 accepts_nested_attributes_for文档中概述的助手(据我所知)。知道为什么这不起作用吗?

最佳答案

原因是因为嵌套表单需要创建的对象才能工作。看起来 Profile 被实例化了,但 Address 没有。

class ProfilesController < ApplicationController
before_action :authenticate_customer!

def new
@profile = Profile.new
@profile.addresses.create # this will create the address object that the nested form will use
end
end

我认为您还需要创建配置文件而不是创建它的实例。

@profile = Profile.create

我自己一直在使用嵌套表单,这就是它对我有用的方式。

关于ruby-on-rails - Rails 4 嵌套表单 Simple_form_for 和 simple_field_for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26835835/

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