web-dev-qa-db-ja.com

Rails:activeadminがcreateアクションをオーバーライドする

Belongs_to:user関係を持つactiveadminリソースがあります。

アクティブな管理者でモデルの新しいインスタンスを作成するとき、現在ログインしているユーザーを、インスタンスを作成したユーザー(私が想像するかなり標準的なもの)として関連付けたいと思います。

だから...私はそれを動作させました:

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

しかし;)私はこれがどのように機能するのか疑問に思っていますか? @item変数をユーザーに割り当ててからsuperを呼び出すことでうまくいくことを願っています(実際にそうします)。私も宝石を調べ始めましたが、実際にどのように機能しているかを見ることができませんでした。

どんなポインタも素晴らしいでしょう。これはInheritedResourcesが提供するものだと思いますか?

ありがとう!

48
patrickdavey

Createメソッドを完全にオーバーライドする必要がほとんどない、同様の状況に遭遇しました。保存する前に、作成時にのみプロパティを挿入したかったのです。あなたの例に非常に似ています。 ActiveAdminソースを読んだ後、私はbefore_createを使用して必要なことを実行できると判断しました。

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

別のオプション:

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

あなたはまさにアクティブな管理者ですInheritedResourcespage の終わりに見ることができる他のすべてのツール。

2
zolter

AA ソースコード に従って、これは私のために働いた:

controller do
  def call_before_create(offer)
  end
end
0
justinsAccount