Разработка: пользователь принадлежит к организации - PullRequest
5 голосов
/ 03 ноября 2011

Я использую devise для аутентификации, и на странице регистрации у меня есть текстовое поле для «организации», поэтому, когда пользователь регистрируется, он создает организацию, и я хочу, чтобы пользователь был связан с этой организацией (пользовательская модель имеет атрибут organization_id).Я создал виды разработок и добавил fields_for для названия организации.В моих моделях у меня есть Пользователь User_to: Organization и Organization has_many: users (будет более одного пользователя, связанного с организациями).Я шел по каждому пути, который мог найти, пытаясь сделать это без модификации контроллера, но мне не повезло.Пожалуйста, не предлагайте делать это без изменения контроллера, если у вас нет примера приложения, в котором вы его внедрили, на который вы можете указать.

Я создал контроллер регистрации, как изложено здесь: ПереопределениеРазработать контроллер регистраций

Я просто бросил несколько операторов put в контроллер, и я не вижу, чтобы те отображались на консоли, поэтому похоже, что я не попадаю на этот контроллер.

Я также скопировал свои представления из приложения / представления / устройства / регистрации в приложение / представления / регистрации, после чего мои представления кажутся пришедшими из космоса!Созданное мною поле организации больше не отображается, и я не могу сказать, откуда загружается представление.

Извините, что не был более кратким, но я не уверен, куда идти с этим.

1 Ответ

8 голосов
/ 03 ноября 2011

Вы можете использовать accepts_nested_attributes_for в своей модели пользователя ( документация )

Это должно выглядеть так:

class User < ActiveRecord::Base
  belongs_to :organization
  accepts_nested_attributes_for :organization
end

class Organization < ActiveRecord::Base
  has_many :users
end

В представлениях вы можете использовать Rails helper или создать поле вручную:

<input type="text" name="user[organization_attributes][name]">

<% user = User.new(organization => Organization.new) %>
<%= form_for user do |form| %>
  <%= form.fields_for user.organization do |organization_form| %>
    <%= organization_form.text_field :name %>
  <% end %>
<% end %>

EDIT: Ваше устройство должно выглядеть так:

<h2>Sign up</h2>
<% resource.organization ||= Organization.new %>
<%= form_for(resource, :as => resource_name, :url => registration_path(resource_name)) do |f| %>
  <%= devise_error_messages! %>
  <div><%= f.label :email %><br />
  <%= f.email_field :email %></div>

  <%= f.fields_for resource.organization do |organization_form| %> 
    <div><%= organization_form.label :name %><br />
    <%= organization_form.text_field :name %></div>
  <% end %>

  <div><%= f.label :password %><br />
  <%= f.password_field :password %></div>
  <div><%= f.label :password_confirmation %><br />
  <%= f.password_field :password_confirmation %></div>
  <div><%= f.submit "Sign up" %></div>
<% end %>
<%= render :partial => "devise/shared/links" %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...