Моя форма для 2 объектов, могу ли я как-то встроить 2 объекта? - PullRequest
1 голос
/ 19 февраля 2012

Когда моя форма будет опубликована, она сначала создаст мой объект модели # 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: Какая сторона ассоциированного пользователя должна иметь значение NULL, account_id в пользовательской таблице или primary_user на стороне учетной записи? Потому что в настоящее время у меня нет нулей с обеих сторон, и это не сработает!

1 Ответ

1 голос
/ 21 февраля 2012

Код модели

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}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...