Подтвердить что ты не робот

Rails: activeadmin overriding создает действие

У меня есть ресурс activeadmin, который имеет отношение own_to: user.

Когда я создаю новый экземпляр модели в активном админе, я хочу связать зарегистрированного пользователя в качестве пользователя, создавшего экземпляр (довольно стандартный материал, который я бы себе представил).

Итак... Я получил его с помощью:

controller do
  def create
    @item = Item.new(params[:item])
    @item.user = current_curator
    super
  end 
end 

Однако;) Мне просто интересно, как это работает? Я просто надеялся, что назначение переменной @item пользователем, а затем вызов супер будет работать (и это произойдет). Я также начал изучать драгоценный камень, но не мог понять, как он работает.

Любые указатели были бы замечательными. Я предполагаю, что это то, что дает вам InheritedResources?

Спасибо!

4b9b3361

Ответ 1

Я столкнулся с аналогичной ситуацией, когда мне действительно не нужно полностью переопределять метод create. Я действительно хотел только добавить свойства перед сохранением, и только при создании; очень похоже на ваш пример. После прочтения источника ActiveAdmin я решил, что могу использовать before_create для выполнения необходимых действий:

ActiveAdmin.register Product do
  before_create do |product|
    product.creator = current_user
  end
end

Ответ 2

Другая опция:

def create
  params[:item].merge!({ user_id: current_curator.id })
  create!
end

Ответ 3

Вы правильно используете admin InheritedResources, все остальные инструменты вы можете увидеть в конце страница.