Пользовательские / ручные ассоциации в контроллере Rails - PullRequest
0 голосов
/ 22 сентября 2010

У меня есть четыре модели со следующим примером:
У пользователя есть один A, B или C.
User.user_type = "A"
User.user_type_id = 12
В сочетании user_type и user_type_id идентифицируют таблицу и запись, к которой привязан конкретный пользователь (в этом примере наш пользователь подключен к записи № 12 в таблице A).

В форме user / new,пользователь решает, какой он пользователь, и форма передает params [: user_type], содержащий «A», «B» или «C», в контроллер Users /: create.

На основании параметров [: user_type], переданных Users / create, мне нужно построить новый A, B или C. Это то, что я получил до сих пор:

Users controller, create:
if @user.save # user_type is present, user_type_id is not
  if @user.user_type == "A"
    @a = A.new.save(false) # build a new A and bypass validation
    @user.user_type_id = @a.id # set user's user_type_id.
    @user.save(false) # minor update so save without validation
  elsif @user.user_type == "B"
    ...
  elsif @user.user_type == "C"
    ...
  end
end

Этот код неправильно дает мне «2» для user_type_id каждый раз.Я знаю, что я поступаю об этом, как правило, неправильно, но я не знаю, как сделать это максимально кратко.Любой совет?

------ РЕДАКТИРОВАТЬ ------
У меня настроены полиморфные ассоциации.Моя текущая настройка:
Пользователь принадлежит_то: аутентифицируемый,: полиморфный => истина
А has_many: пользователи,: как =>: аутентифицируемый (аналогично для B и C)

1 Ответ

0 голосов
/ 22 сентября 2010

Здравствуйте, попробуйте добавить проверки в вашу User модель (наличие типа пользователя) и в действии сохранения

a = params[:user_type].constantize.new.save(false)
@user.user_type_id = a.id
@user.save!

и использовали ли вы полиморфные ассоциации?

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