Краткий ответ: нет. Вы не можете передавать аргументы в 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