Каков наилучший способ иметь форму на основе нескольких моделей для создания учетной записи в Devise (RoR) - PullRequest
1 голос
/ 22 марта 2011

ПРИМЕЧАНИЕ РЕДАКТИРОВАТЬ Я переписываю этот вопрос полностью сейчас, когда я немного лучше понимаю рельсы и устройства.

Я ищу способ использования структуры одной таблицы (Account) создавать различные типы учетных записей.

С чем мне сейчас тяжело работать, так это структурой, в которой мой бизнес должен иметь учетную запись, но не обязательно наоборот (учетная запись может быть просто обычным пользователем).Я думаю, что самым простым подходом было бы просто иметь отношение 1 к 1, а не наследование, но я мог бы ошибиться там.

Причина, по которой меня смущает, - это процесс регистрации.Если я приму информацию об учетной записи, я думаю, что смогу использовать accepts_nested_attributes_for , чтобы принять информацию об учетной записи, но я боюсь, что это нарушит рабочий процесс, которого ожидает устройство.Я рассмотрел переопределение Devise::RegistrationController, но я действительно не знаю, как rails будет справляться с этим (то есть, если я называю super, но я имею дело с Бизнесом, а не с Учетной записью - что происходит?)

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Вы можете использовать CanCan для создания ролей учетной записи и спрашивать в своем коде current_user.role?(:admin)

Существует хороший шаблон приложения с интегрированным устройством / канкан / шип:

https://github.com/augusto/devise-cancan-spike

0 голосов
/ 26 марта 2011

По сути, нет проблем с наличием формы, которая управляет несколькими моделями, если модели связаны друг с другом.

Для достижения этой цели можно использовать «accepts_nested_attributes_for» в вашей модели.

Для вашей ситуации вы бы сделали что-то вроде этого:

class Employee < ActiveRecord::Base
  belongs_to :business
  accepts_nested_attributes_for :business
end

Тогда при просмотре регистрации вы будете использовать:

<!-- validation errors etc -->
<%= form_for @employee do |f| %>
  <!-- all your employee fields etc -->

  <%= f.fields_for :business do |b| %>
    <p>
      <%= b.label :name %>
      <br/>
      <%= b.text_field :name %>
    </p>

    <!-- more fields from business -->
  <% end %>
<% end %>

Если вы хотите обрабатывать регистрацию как сотрудника, так и «обычного пользователя» в одной форме, вы, вероятно, могли бы сделать что-то подобное (никогда не пробовал, но я думаю, что это должно работать!):

<!-- validation errors etc -->
<%= form_for @person do |f| %>
  <!-- all your person fields etc, assuming no extras for employee -->

  <% if @person.respond_to? :business %>
    <%= f.fields_for :business do |b| %>
      <p>
        <%= b.label :name %>
        <br/>
        <%= b.text_field :name %>
      </p>

      <!-- more fields from business -->
    <% end %>
  <% end %>
<% end %>

P.S. Вы упомянули в своем вопросе, что волновались, что Devise не справится с вложенными атрибутами. Это точно так же, как я делаю это в одном из моих приложений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...