我的表单是2个对象,我可以以某种方式嵌入2个对象吗?

时间:2012-02-19 13:01:01

标签: ruby-on-rails forms

当我的表单被发布时,它将首先创建我的模型对象#1,如果成功,那么它将创建模型对象#2。

我的表单字段需要混合两个模型对象的两个输入字段。

我可以使用表单助手执行此操作,还是应该手动执行此操作?

更新

以下是我的模特:

我的模特:

Account
  has_many :users
  has_one  :primary_user, :class_name => 'User'

User
  has_one :account

我的用户表有:

account_id

我的帐户表:

primary_user_id

因此,在注册/注册帐户时,我还希望包含用户对象中的字段:

user_name
email
password

因此,在创建帐户时,也会创建primary_user用户帐户。

我该怎么做?

PSS:员工的哪一方应该可以为空,用户表上的account_id或帐户端的primary_user?因为目前我双方都没有空值而且不起作用!

1 个答案:

答案 0 :(得分:1)

型号代码

class Account < ActiveRecord::Base
  has_many :users
  has_one  :primary_user, :class_name => "User", 
    :conditions => {:is_primary => true}

  accepts_nested_attributes_for :primary_user, :allow_destroy => true
end

控制器代码

class AccountsController < ApplicationController

  def new
    @account = Account.new(:primary_user => User.new)
  end

  def create
    @account = Account.new(params[:account])
    if @account.save
      flash[:info] = "Created account"
      redirect_to root_url
    else
      render :new
    end
  end
end

查看代码

- semantic_form_for @account do |f|
  - f.inputs do
    != f.input :company_name
    != f.input :address
    != f.input :city
    != f.input :state
    - f.semantic_fields_for :primary_user do |puf|
      != f.input :name
      != f.input :login
      != f.input :password
      != f.input :password_confirmation
  - f.buttons  do
    != f.commit_button 'Save'
    ! #{link_to 'Cancel', root_url}