我正在创建一个由Formtastic使用的帮助器,但是我收到了undefined local variable or method
错误。我不知道放在哪里它可以工作。
我已经尝试过application_helper.rb和app / helpers / active_admin / view_helpers.rb
答案 0 :(得分:70)
您可以在尝试时在app / helpers /中定义它们,但是您需要通过活动管理员的初始化程序包含它们,如下所示:
# in config/initializers/active_admin.rb
ActiveAdmin.setup do |config|
....
end
module ActiveAdmin::ViewHelpers
include ApplicationHelper
end
答案 1 :(得分:59)
您需要将帮助函数放在app/helpers/active_admin/views_helper.rb
文件中
示例:
module ActiveAdmin::ViewsHelper #camelized file name
def my_helper
# do something
end
end
答案 2 :(得分:23)
我使用ActiveAdmin 0.6.1发现,ActiveAdmin将在app / helpers / active_admin / * _ helper.rb中寻找帮助者,但名称并不重要。
重要的是:
如果有人知道这是正式记录在哪里,那就太棒了。
答案 3 :(得分:12)
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
答案 4 :(得分:7)
我可以在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
实际上,这不是一个很好的解决方案,但它干涸并且运作良好。我已经阅读并尝试了很多方法和解决方案,例如ViewHelpers模块(放在'app / helpers'或'app / admin / active_admin'下),ActiveAdmin :: DSL monkey patching,...但是那些从未在版本中工作过的0.6.1(我对其他版本没有任何想法):(
答案 5 :(得分:4)
使用ActiveAdmin::ViewHelpers
和app/admin/active_admin/view_helpers.rb
为我activeadmin 0.3.4
定义0.5.0
。
答案 6 :(得分:4)
另一种方法是使幕后生成的特定ActiveAdmin控制器包含帮助程序。此方法将允许在每个文件中显示帮助程序,而不是全局。
ActiveAdmin.register MyModel do
controller do
include MyHelper
end
end
答案 7 :(得分:3)
使用git://github.com/activeadmin/activeadmin.git中的activeadmin 1.0.0.pre1
Rails 4.2.1
这对我有用......
<system.serviceModel>
<serviceHostingEnvironment multipleSiteBindingsEnabled="false" />
<services>
<service name="Sync.Inbound" behaviorConfiguration="serviceWebConfiguration">
<endpoint address="" binding="webHttpBinding" bindingConfiguration="defaultRest" ...
</service>
</services>
<bindings>
<webHttpBinding>
<binding name="defaultRest" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" maxBufferPoolSize="2147483647" transferMode="Streamed">
<readerQuotas maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxDepth="2147483647" maxNameTableCharCount="2147483647" />
<security mode="None" />
</binding>
</webHttpBinding>
</bindings>
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
答案 8 :(得分:2)
您还可以使用ActiveAdmin partials:
render partial: 'admin/my_partial', locals: { var: my_var }
在app/views/admin/_my_partial.html.arb
内你的active_admin ruby代码。
答案 9 :(得分:1)
使用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|
,但如果有人能解释为什么这是一个坏主意,我会找到不同的方式。