В моем приложении только пользователи с ролью администратора могут создать новых пользователей. В новой пользовательской форме у меня есть избранное поле для каждой из доступных ролей, которые могут быть присвоены новым пользователям.
Я надеюсь использовать after_create метод обратного вызова присвоить роль пользователю. Как я могу получить доступ к выбранному значению избранного поля в after_create методе?
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
flash[:notice] = 'User creation successful.'
format.html { redirect_to @user }
else
format.html { render :action => 'new' }
end
end
end
В пользовательской модели я имею:
after_create :assign_roles
def assign_roles
self.has_role! 'owner', self
# self.has_role! params[:role]
end
Я получаю ошибку, потому что модель не знает, какова роль.
Перейдите в представление Серверы в Eclipse, затем щелкните правой кнопкой мыши на сервере и выберите Открыть. Файлы журнала хранятся в папке, относящейся к пути в поле «Путь к серверу».
Поскольку поле пути не является редактируемым, можно также «Открыть конфигурацию запуска», перейти на вкладку «Аргументы», скопировать аргумент VM для catalina.base (в кавычках). Это полный путь к каталогу WTP webapp. Копирование значения в буфер обмена может сохранить трудоемкую задачу просмотра файловой системы по пути.
Также обратите внимание на то, что при запуске или отладке необходимо просматривать выходные данные файла журнала в ракурсе консоли.
-121--2013024-Как насчет
return i > j? (i > k? i: k): (j > k? j: k);
двух сравнений, без использования временных временных переменных стека...
-121--3506949- Метод доступа attr _
можно использовать для создания виртуального атрибута и установки этого атрибута как части действия создания.
Короткий ответ - нет. Вы не можете передавать никаких аргументов в after_create.
Однако то, что вы пытаетесь сделать, довольно распространено, и есть другие способы обойти это.
Большинство из них предполагает назначение отношения до создания объекта, и пусть ActiveRecord позаботится обо всем.
Самый простой способ добиться этого зависит от отношений между ролями и пользователями. Если это один ко многим (каждый пользователь имеет одну роль), то пусть ваши пользователи принадлежат к роли и отправляют role_id через форму.
<%= f.collection_select :role_id, Role.all, :id, :name %>
Если между пользователями и ролями существует отношение "многие ко многим", то вы добьетесь того же, назначив @user.role_ids
<%= f.collection_select :role_ids, Role,all, :id, :name, {}, :multiple => :true %>
Контроллер в любом случае выглядит так
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
flash[:notice] = 'User creation successful.'
format.html { redirect_to @user }
else
format.html { render :action => 'new' }
end
end
end