如何使用嵌套表单将相同的数据插入到两个表中

时间:2011-09-19 09:39:59

标签: ruby-on-rails-3

我使用嵌套表单将数据插入两个表(用户和地址)。我想让我的用户在表中都有电子邮件ID,但用户应输入一次电子邮件ID。这是我目前的观点

<%= form_for @user do |f| %>
  <%= f.text_field(:name, :size => 20) %>
  <%= f.text_field(:email, :size => 20) %>

    <%= f.fields_for :address do |r| %>
      <%= r.text_field(:street, :size => 20) %>
      <%= r.text_field(:city, :size => 20) %>
    <% end %>
   <%= f.submit "Create" %>
<% end %>

在我的嵌套部分“地址”中,我再次想要电子邮件字段,但我不希望电子邮件的重复文本字段。如何使用嵌套表单“地址”中的电子邮件部分?我尝试过使用隐藏的表单字段,但它没有用。请有人帮忙吗。

修改

控制器(仅与问题相关的部分)

class UsersController < ApplicationController
 def new       
   @domain = Domain.find(params[:id])
   @user = @domain.users.build
   @title = "Add User"
 end
 def create
   @user = User.new(params[:user])
   if @user.save
    flash[:success] = "Welcome!"
    redirect_to manageDomain2_path(:id => @user.domain_id)
  else
    @title = "Add User"
    redirect_to addNewUser_path(:id => @user.domain_id)
 end
end

我尝试过:

@user = User.new(params[:user][:address_attributes].merge!(:email => params[:user][:email]))

使用时:

@user = User.new(params[:user][:address].merge!(:email => params[:user][:email]))

我收到错误“Undefined method merge”。

用户模型(仅与问题相关的部分)

class User < ActiveRecord::Base
   attr_accessible: :email, :domain_id, :address_attributes

   belongs_to :domain
   has_one :address

   accepts_nested_attributes_for :address
end

地址模型(完整)

class Address < ActiveRecord::Base
   attr_accessible :user_id, :email, :street, :city

end

当我使用

belongs_to :user

在地址模型中我得到语法错误。所以我试过没有使用它。 user_id,street,city正在获得正确的值,但是电子邮件电子邮件字段没有得到任何东西。

1 个答案:

答案 0 :(得分:0)

您只需将其添加到控制器的params哈希:

params[:user][:address].merge!(:email =>  params[:user][:email])