Направляющие: можно ли передать аргументы after_create методу?

В моем приложении только пользователи с ролью администратора могут создать новых пользователей. В новой пользовательской форме у меня есть избранное поле для каждой из доступных ролей, которые могут быть присвоены новым пользователям.

Я надеюсь использовать 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

Я получаю ошибку, потому что модель не знает, какова роль.

6
задан Braxo 9 February 2010 в 21:55
поделиться

2 ответа

@ royalsampler сказал :

Перейдите в представление Серверы в Eclipse, затем щелкните правой кнопкой мыши на сервере и выберите Открыть. Файлы журнала хранятся в папке, относящейся к пути в поле «Путь к серверу».

Поскольку поле пути не является редактируемым, можно также «Открыть конфигурацию запуска», перейти на вкладку «Аргументы», скопировать аргумент VM для catalina.base (в кавычках). Это полный путь к каталогу WTP webapp. Копирование значения в буфер обмена может сохранить трудоемкую задачу просмотра файловой системы по пути.

Также обратите внимание на то, что при запуске или отладке необходимо просматривать выходные данные файла журнала в ракурсе консоли.

-121--2013024-

Как насчет

return i > j? (i > k? i: k): (j > k? j: k);

двух сравнений, без использования временных временных переменных стека...

-121--3506949-

Метод доступа attr _ можно использовать для создания виртуального атрибута и установки этого атрибута как части действия создания.

15
ответ дан 8 December 2019 в 12:19
поделиться

Короткий ответ - нет. Вы не можете передавать никаких аргументов в 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
4
ответ дан 8 December 2019 в 12:19
поделиться
Другие вопросы по тегам:

Похожие вопросы: