Правильно ли установлена ​​эта полиморфная ассоциация? - PullRequest
0 голосов
/ 29 июня 2018

У меня есть два типа счетов с отношениями, изложенными ниже в моделях ниже. Мне нужно создать регистрационную форму для @account, в которой есть поле выбора формы, в котором пользователь может выбрать регистрацию для учетной записи учащегося или партнера и сохранить эту запись учетной записи в соответствии с выбором (т. Е. Для таблицы студентов или партнеров и таблица счетов).

У меня проблемы с контроллером Accounts # new, и я не уверен, как это настроить так, чтобы это работало.

Счет:

  class Account < ApplicationRecord
    belongs_to :acct_holderable, :polymorphic => true

Студент:

  class Student < ApplicationRecord
    has_one :account, :as => :acct_holderable

Партнеры:

  class Partner < ApplicationRecord
    has_one :account, :as => :acct_holderable

Просмотр для учетных записей # new

<%= form_for(@account) do |f| %>
  <%= render 'shared/error_messages', object: @account %>

  <%= f.label :account_type %>
  <%= f.select :acct_holderable, options_for_select(account_type, @account.account_holderable_type), class: 'form-control' %>

 <%= f.label :first_name %>
  <%= f.text_field :first_name, class: 'form-control' %>

  <%= f.label :last_name %>
 <%= f.text_field :last_name, class: 'form-control' %>

  <%= f.label :email %>
  <%= f.email_field :email, class: 'form-control' %>

  <%= f.label :password %>
  <%= f.password_field :password, class: 'form-control' %>

  <%= f.label :password_confirmation %>
  <%= f.password_field :password_confirmation, class: 'form-control' %>

  <%= f.submit yield(:button_text), class: "btn btn-primary" %>
<% end %>

Помощник по учетной записи (для options_select)

def account_type
    input =<<-OPTIONS
    Student,
    Partner,
    Other Account TBU,
    Other Account TBU      
    input.split(',')
end

Контроллер счетов

def new
    @account = Account.new
  end

  def create
    @account = Account.new(account_params)
    if @account.save
      @account.send_activation_email
      flash[:info] = "Please check your email to activate your account before logging in!"
      redirect_to login_url
    else
      render 'new'
    end
  end

1 Ответ

0 голосов
/ 29 июня 2018

Пожалуйста, проверьте следующую ссылку для получения дополнительной информации http://guides.rubyonrails.org/association_basics.html#polymorphic-associations

https://6ftdan.com/allyourdev/2015/02/10/rails-polymorphic-models/

Эти ссылки помогут вам лучше понять полиморфную ассоциацию.

...