Я строю систему с моделью User (аутентифицированной с использованием AuthLogic) и тремя типами пользователей в трех моделях: одна из этих моделей - Employer.У каждой из этих трех моделей есть has_many: users,: as =>: authenticable.
Я начинаю с того, что новый посетитель сайта создает свою собственную запись «User» с именем пользователя, паролем, типом пользователя, которым они являются,и т. д.
После создания пользователь отправляется в действие «новое» для одной из трех моделей.Так что, если они скажут нам, что являются работодателем, мы redirect_to: controller => "работодатели,: action =>" new ".
Вопрос: Когда работодатель подал заявку, я хочуустановить значение current_user.user_type_id равным идентификатору работодателя. Это должно быть просто ... но это не работает.
# Employers Controller / new
def new
@employer = Employer.new
1.times {@employer.addresses.build}
render :layout => 'forms'
end
# Employers Controller / create
def create
@employer = Employer.new(params[:employer])
if @employer.save
if current_user.blank?
redirect_to :controller => "users", :action => "new"
else
current_user.user_type_id = @employer.id
current_user.user_type = "Employer"
redirect_to :action => "home", :id => current_user.user_type_id
end
else
render :action => "new"
end
end
------ ОБНОВЛЕНИЕ ------
Привет, ребята. В ответ:
Я использую эту структуру таблицы, потому что каждая из моих трех моделей пользовательских типов имеет много разных полей, и каждая имеет разные отношения с другими моделями, которыеВот почему я избегаю STI.
By 1.times (@ Employer.addresses.build) Я подключаю модель работодателя к полиморфной таблице адресов в одной форме, поэтому я прошу контроллер:создайте новый адрес, чтобы идти вместе с новым работодателем.
Averell: вы упомянули инкапсуляцию ... что-то в модели с помощью метода «сеттера». Я понятия не имею, что вы подразумеваете под этим - не могли бы вы, пожалуйстаобъясните как это работает (или приведите мне примерв другом месте)?С ответом tsdbrown мне удалось создать поведение, которое я хочу ... если есть более элегантный способ выполнить то же самое, что я хотел бы узнать, как.
Большое спасибо.
Спасибо tsdbrown за ответ на проблему current_user.save!