Вложенная форма для Rails - PullRequest
1 голос
/ 25 марта 2012

Я новичок в Rails и у меня есть проблемы с созданием вложенной формы.

Мои модели:

class User < ActiveRecord::Base
  belongs_to :company
  accepts_nested_attributes_for :company, :reject_if => :all_blank
end

class Company < ActiveRecord::Base
  has_many :users
end

Теперь я хотел бы создать новую компанию со страницы регистрации пользователей (я использую Devise, кстати), указав только название компании.И иметь связь между новым пользователем и новой компанией.

В консоли я могу создать компанию для существующего пользователя, например:

@company = User.first.build_company(:name => "name of company")
@company.save

Это работает, но я не могусделать это для нового пользователя.В моей новой форме регистрации пользователя я попробовал это (я знаю, что неправильно, сначала создав нового пользователя, но я пытаюсь заставить что-то работать здесь.)

<%= simple_form_for(resource, :as => resource_name, :html => { :class => 'form-horizontal' }, :url => registration_path(resource_name)) do |f| %>
<%= f.error_notification %>

<div class="inputs">
  <% 
    @user = User.new
    company = @user.build_company()

  %>
  <% f.fields_for company  do |builder| %>
      <%= builder.input :name, :required => true, :autofocus => true %>
  <% end %>      

  <%= f.input :email, :required => true, :autofocus => true %>
  <%= f.input :password, :required => true %>
  <%= f.input :password_confirmation, :required => true %>
</div>

<div class="form-actions">
  <%= f.button :submit, :class => 'btn-primary', :value => 'Sign up' %>
</div>

Я приложил все усилия к Google для решения/ пример.Я нашел несколько примеров вложенных форм, но мне просто не понятно, как это сделать.

1 Ответ

4 голосов
/ 25 марта 2012

Если вы используете Devise - я думаю, в пользовательской модели у вас есть:

attr_accessible :email, :password, :password_confirmation

Итак, если это правда - я думаю, что это может помочь:

class User < ActiveRecord::Base
  belongs_to :company
  accepts_nested_attributes_for :company, :reject_if => :all_blank
  ...
  attr_accessible :email, :password, :password_confirmation, :company_attributes
end

Форма:

<% resource.build_company %>
<%= simple_form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
<%= f.error_notification %>

<div class="inputs">
  <%= f.fields_for :company  do |builder| %>
      <%= builder.input :name, :required => true, :autofocus => true %>
  <% end %>      

  <%= f.input :email, :required => true, :autofocus => true %>
  <%= f.input :password, :required => true %>
  <%= f.input :password_confirmation, :required => true %>
</div>

<div class="form-actions">
  <%= f.button :submit, :class => 'btn-primary', :value => 'Sign up' %>
</div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...