Formtasticで使用するヘルパーを作成していますが、undefined local variable or method
エラー。それが機能するようにどこに置くべきかわかりません。
私はすでにapplication_helper.rbとapp/helpers/active_admin/view_helpers.rbで試しました
試したようにapp/helpers /でそれらを定義できますが、次のようにアクティブな管理者のイニシャライザーを通してそれらを含める必要があります。
# in config/initializers/active_admin.rb
ActiveAdmin.setup do |config|
....
end
module ActiveAdmin::ViewHelpers
include ApplicationHelper
end
ヘルパー関数をapp/helpers/active_admin/views_helper.rb
ファイルに配置する必要があります例:
module ActiveAdmin::ViewsHelper #camelized file name
def my_helper
# do something
end
end
ActiveAdmin 0.6.1を使用して見つけたのは、ActiveAdminがapp/helpers/active_admin/* _ helper.rbでヘルパーを探すことですが、名前は実際には重要ではありません。
重要なのは:
これが公式に文書化されている場所を誰かが知っていれば、それは素晴らしいことです。
以下に例を示します。 https://Gist.github.com/afred/7035a657e8ec5ec08d3b
app/helpers/active_admin/view_helpers.rb
私を助けなかった
編集:私はそれに応じてviews_helper.rbとViewsHelperに変更し、それが働いた
*ただし、特定のリソースに対してのみ定義したい場合は、私の方法で行うことができます
定義しなければならなかった
#app/helpers/active_admin/categories_helper.rb
module ActiveAdmin::CategoriesHelper
def helper_method
end
end
active_adminリソースのapp/admin/categories.rb
ActiveAdmin 0.6.1(最終的に!)で動作させることができます。解決策は、次のようにヘルパーモジュールを作成することです。
# app/helpers/active_admin_helpers.rb
module ActiveAdminHelpers
# make this method public (compulsory)
def self.included(dsl)
# nothing ...
end
# define helper methods here ...
def helper_method
...
end
end
次に、このモジュールを次のように組み込みます。
# app/admin/[resource].rb
include ActiveAdminHelpers
ActiveAdmin.register [Resource] do
...
end
実際には、これはニースのソリューションではありませんが、DRYであり、正常に動作しています。ViewHelpersモジュール( 'app/helpers'または 'app/admin/active_admin ')、ActiveAdmin :: DSLモンキーパッチ、...しかし、それらはバージョン0.6.1で動作しませんでした(他のバージョンについてのアイデアはありません):(
ActiveAdmin::ViewHelpers
でapp/admin/active_admin/view_helpers.rb
を定義すると、activeadmin 0.3.4
および0.5.0
で機能します。
これを行う別の方法は、舞台裏で生成された特定のActiveAdminコントローラーにヘルパーを含めることです。この方法により、グローバルではなくファイルごとにヘルパーを明示的に含めることができます。
ActiveAdmin.register MyModel do
controller do
include MyHelper
end
end
git://github.com/activeadmin/activeadmin.gitのactiveadmin 1.0.0.pre1を使用
レール4.2.1
これは私のために働いた...
my_app/app/helpers/active_admin/resources_helper.rb
module ActiveAdmin
module ResourcesHelper
def resource_form_for(_resource, _params, _options = {}, &_block)
url = if _resource.new_record?
UrlBuilder.resources_path(_resource.class, _params)
else
UrlBuilder.resource_path(_resource.class, _params)
end
method = _resource.new_record? ? :post : :put
options = { url: url, method: method, builder: ActiveAdmin::FormBuilder }
options.merge!(_options)
semantic_form_for([:admin, _resource], options) do |f|
_block.call(f)
end
end
end
end
my_app/app/admin/balance_sheets.rb
ActiveAdmin.register BalanceSheet do
form partial: 'form'
end
my_app/app/views/admin/balance_sheets/_form.html.erb
<%= resource_form_for(resource, params) do |f| %>
<%= f.inputs "Fields" do %>
<%= f.input :progress_status %>
<%= f.input :crew %>
<%= f.input :shift %>
<%= f.input :expected_progress %>
<%= f.input :real_progress %>
<%= f.input :analyst, collection: User.analysts %>
<%= f.input :activity_ids, as: :check_boxes, collection: Activity.balance_sheet_activities %>
<%= f.input :worker_ids, as: :check_boxes, collection: Worker.all %>
<% end %>
<%= f.actions %>
<% end %>
ActiveAdminパーシャルを使用することもできます:
render partial: 'admin/my_partial', locals: { var: my_var }
そしてapp/views/admin/_my_partial.html.arb
your_active_admin Rubyコード。
Rails 3.2.11とgem activeadmin(0.5.1)でうまくいったのは、app/active_admin/view_helpers.rbファイルを追加したり、config/initializers/active_adminでモジュールを宣言したりしなかった.rb
モデルごとに論理的にapp/* _ helpers.rbファイルにヘルパーを配置しました。次に、使用したapp/admin/model.rbファイル内で:
# app/admin/[resource].rb
ActiveAdmin.register [Resource] do
...
filter :gender, as: :select, collection: proc{genders}
...
end
フィルターでヘルパーを使用するには、リストビューでフィルターする性別のドロップダウンリストを表示します。対応するフォーム作成フィールドには、次を使用しました。
# app/admin/[resource].rb
ActiveAdmin.register [Resource] do
form do |f|
f.inputs "Case Manager" do
...
f.input :gender, as: :radio, collection: genders
...
f.buttons
end
end
end
入力フォームのラジオボタンを表示します。
proc{}
ブロックの外側にform do |f|
が必要な理由はわかりませんが、なぜそれが悪い考えであるかを説明できる人がいれば、別の方法を見つけるでしょう。