Techioz Blog

アクティブな管理者でフォームオブジェクトパラメータにアクセスする方法

概要

これが実際に可能であることを願っていますが、カスタムアクションで送信するためのフォームパラメーターにアクセスできないようです。

ここでの目的は、ユーザーがフォームに記入し、[プレビュー] ボタンをクリックして投稿がどのように表示されるかを表示することです。問題ないビューを作成しましたが、パラメーターを渡すだけが問題です。

これが私の現在のフォームです

# Create Blog Post
form do |f|
  inputs 'Blog' do
    f.semantic_errors
    f.input :title
    f.input :category_id, as: :select, collection: Category.all
    f.input :comments, as: :text, input_html: { rows: 10, cols: 10 }
    f.input :published, as: :boolean
  end
  inputs 'Submit' do
    f.actions do
    f.action :submit
    f.action :cancel
    f.action :reset
    li do
      link_to 'Preview', preview_my_admin_panel_posts_path(post: { title: "test", comments: 'comments', category_id: '1' }) # Hardcoded for now
    end
   end
 end
end

# Collection Action to handle object
collection_action :preview, method: :get do
  @post = Post.new(permitted_params[:post])
end

したがって、すべてがそのまま(ハードコード化されている)パラメータが渡されてプレビュービューに出力されますが、フォームオブジェクト/パラメータにアクセスしようとするとすぐに何も渡されません。

# Console Output
1 - link_to 'Preview', preview_my_admin_panel_posts_path(post: { title: f.object.title, comments: f.object.comments, category_id: f.object.category_id})
#<Post:0x007f8bbe1fc4c0 id: nil, title: "", comments: "", category_id: nil, slug: nil, published: 0, created_at: nil, updated_at: nil>
2 - link_to 'Preview', preview_my_admin_panel_posts_path(post: { title: f.title, comments: f.comments, category_id: f.category_id })
# Console Output
#<Post:0x007f8bbe1fc4c0 id: nil, title: nil, comments: nil, category_id: nil, slug: nil, published: 0, created_at: nil, updated_at: nil>
3 - link_to 'Preview', preview_my_admin_panel_posts_path(@post)
# Console Output
#<Post:0x007f8bbe1fc4c0 id: nil, title: nil, comments: nil, category_id: nil, slug: nil, published: 0, created_at: nil, updated_at: nil>

これを他にどこに行えばよいのかわかりません。f.object.param が近いように見えますが、空の文字列を通過しますか?

どのような代替ソリューションを検討できますか?

パラメータをコンソールに出力すると、これが返されます

{"action"=>"preview", "controller"=>"my_admin_panel/posts"}

解決策

投稿を作成しようとしていますか?このページをロードするとき、フィールドには値がないため、リンクはパラメータをロードしません(プレビュー リンクの要素を検査すると、リンクにパラメータがないことが確認できます)。

1 つの方法は、リンクがコントローラーにルーティングされる前に JavaScript を使用して値を取得することです。