Ruby on rails Rails 2.3.5的表单和字段存在问题

Ruby on rails Rails 2.3.5的表单和字段存在问题,ruby-on-rails,forms,Ruby On Rails,Forms,我试图通过表单提交向用户模型添加地址,但遇到了问题。用户: class User < ActiveRecord::Base has_many :addresses end 可以通过账户控制器控制的账户页面向其账户添加地址 class AccountsController < ApplicationController def addresses @user = current_user @addresses = @user.addresse

我试图通过表单提交向用户模型添加地址,但遇到了问题。用户:

class User < ActiveRecord::Base 
  has_many :addresses 
end
可以通过账户控制器控制的账户页面向其账户添加地址

class AccountsController < ApplicationController
   def addresses
       @user = current_user
       @addresses = @user.addresses
       default_country = Country.find Spree::Config[:default_country_id]
       @countries = Checkout.countries.sort
       @states = default_country.states.sort
   end
 end
在view/accounts/addresses中,我有一个表单要提交:

<% form_for @user do |user_form| %>
    <% user_form.fields_for :address do |address_form| %>
            <%= address_form.text_field :firstname, :class => 'required', :value=>"" -%>
            <%= address_form.text_field :lastname, :class => 'required', :value=>"" -%>
            <%= address_form.text_field :business_name, :class => 'required', :value=>"" -%>
            <%= address_form.text_field :address1, :class => 'required', :value=>"" -%>
            <%= address_form.text_field :address2, :value=>"" %>
            <%= address_form.text_field :city, :class => 'required', :value=>"" -%>
            ...
        <%= address_form.submit %>
    <% end -%>
<% end %>
我在这里查看一对多字段的代码:

但问题是我有多个地址,但一次只想提交一个地址。我需要向用户/地址模型和/或帐户控制器添加什么,以便在提交表单时成功创建地址并将其添加到用户模型?如果有更简单的方法,请告诉我

您需要为

你的表格可以是

<% form_for @user do |user_form| %>
    <% user_form.fields_for :addresses do |address_form| %>
            <%= address_form.text_field :firstname, :class => 'required' -%>
            <%= address_form.text_field :lastname, :class => 'required' -%>
            <%= address_form.text_field :business_name, :class => 'required' -%>
            <%= address_form.text_field :address1, :class => 'required' -%>
            <%= address_form.text_field :address2 %>
            <%= address_form.text_field :city, :class => 'required' -%>
            ...
        <%= address_form.submit %>
    <% end -%>
<% end %>
这将允许您编辑所有现有地址,如果您需要向列表中添加1,您可以


@user.addresses.build在控制器操作中填充一个空操作。

我不知道这是如何工作的。假设用户已经有2个地址,并希望添加一个地址,使之成为3个地址,难道不会有2个地址部分吗?我的控制器操作应该是什么样的?用户_form.fields_for:addresses do | address | form |将迭代地址关联中的每个地址。您可以将he@user.addresses.build call放在任何需要显示空地址的地方。如果您正在使用accepts_nested_attributes_for,那么您的参数将是{'user'=>{'addresses_attributes'=>{'0'=>{:firstname=>'firstname'.},'1'=>{:firstname=>'Second name'.},并且您将始终通过@user.update_AttributeParams[:user]更新它call.这是您一直在寻找的还是您只是想保存个人地址?当我调用@users.addresses.build时,这会清除我当前存储在user中的所有地址以生成一个空白地址吗?我想保留所有已与该用户关联的地址,并使用此表单向该用户添加另一个地址提交。i如果我所在的视图当前正在使用accounts controller,那么表单提交的操作是在accounts还是users controller中?我似乎对调用@user.update\u AttributeParams[:user]的位置感到困惑我对rails非常陌生,因此任何额外的澄清都会非常有用。谢谢.@users.addresses.build是一个帮助器方法,用于建立关联,但不保存新记录。它将生成一个没有ID的新记录,并将所有属性清空,这些属性将提交到表单save update\u attributes上。在这种情况下,rails将默认设置为用户控制器,因为它使用@user来确定表单的提交位置。您可以使用:url选项来显式显示。您的表单将建立您的参数[:user]并将其作为表单提交。你想在@user上调用你的update\u属性,无论你想在哪里提交记录。好的,我就快到了!我可以提交表单,并且我在操作中的参数中得到了这一点:但是当我调用@user.update\u attributesparams[:user]@user没有得到更新的地址。以下是我的操作:def add_address@user=user.find_by_idparams[:id]@user.addresses.build@user.update_attributeparams[:user]respond_to do | format | format.html{重定向_back_或_default/accounts/addresses}结束我注意到的一件事是@user没有生成地址。我尝试再次添加生成行,但没有成功。
<% form_for @user do |user_form| %>
    <% user_form.fields_for :addresses do |address_form| %>
            <%= address_form.text_field :firstname, :class => 'required' -%>
            <%= address_form.text_field :lastname, :class => 'required' -%>
            <%= address_form.text_field :business_name, :class => 'required' -%>
            <%= address_form.text_field :address1, :class => 'required' -%>
            <%= address_form.text_field :address2 %>
            <%= address_form.text_field :city, :class => 'required' -%>
            ...
        <%= address_form.submit %>
    <% end -%>
<% end %>