我正在创建一个用于Formtastic的帮助程序,但是我遇到了“未定义的局部变量或方法”错误。我不知道在哪里放置它才能起作用。
我已经尝试将其放置在application_helper.rb和app/helpers/active_admin/view_helpers.rb中。
我正在创建一个用于Formtastic的帮助程序,但是我遇到了“未定义的局部变量或方法”错误。我不知道在哪里放置它才能起作用。
我已经尝试将其放置在application_helper.rb和app/helpers/active_admin/view_helpers.rb中。
您可以在app / helpers /中定义它们,但您需要通过Active Admin的初始化程序将它们包含进来,就像这样:
# 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
controller do include ActiveAdmin::ViewsHelper end
collection_action :my_action do render json: my_helper end
- Lev Lukomskyapp/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.register MyModel do
controller do
include MyHelper
end
end
我可以在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版本中起作用(我对其他版本没有任何想法):(
ActiveAdminHelpers
包含到了Object
中。这意味着一旦该文件被加载,这些辅助方法将在整个应用程序中的每个对象上都可用。 - Peejaapp/admin/active_admin/view_helpers.rb
中定义ActiveAdmin::ViewHelpers
对于我而言可以在activeadmin 0.3.4
和0.5.0
版本下运行。请注意,保留了HTML标签,但不提供解释。使用来自git://github.com/activeadmin/activeadmin.git的activeadmin 1.0.0.pre1
Rails 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 %>
# 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
form do |f|
块之外需要proc{}
,但如果有人能解释为什么这是个坏主意,我会找到另一种方法。
ApplicationHelper
是自动加载的,但是我需要重新启动我的应用程序才能让 ActiveAdmin 检测到任何新的帮助程序。 - Besi