Mik*_*ike 7 ruby-on-rails ruby-on-rails-4
我已经对默认表单构建器进行了分类,以添加一些其他方法.示例代码如下.
module ApplicationHelper
class AppFormBuilder < ActionView::Helpers::FormBuilder
def coordinates_field(method, options = {})
options[:readonly] = 'true'
....
@template.text_field(@object_name, method, objectify_options(options))
end
end
end
Run Code Online (Sandbox Code Playgroud)
这很好用,但要使用它我必须更改使用该coordinates_field方法的每个表单的视图代码,即
<%= form_for @object, :builder => ApplicationHelper::AppFormBuilder do |f| %>
...
<% end %>
Run Code Online (Sandbox Code Playgroud)
听起来理论上可以在全局(config.action_view.default_form_builder)中更改默认表单构建器,但我似乎无法使其工作.这是我尝试过的/config/application.rb:
module Web
class Application < Rails::Application
...
config.action_view.default_form_builder = "ApplicationHelper::AppFormBuilder"
end
end
Run Code Online (Sandbox Code Playgroud)
这导致错误未定义方法'new'用于"ApplicationHelper :: AppFormBuilder":当我点击具有表单的视图时的字符串.
如果我反而尝试这个
config.action_view.default_form_builder = ApplicationHelper::AppFormBuilder
Run Code Online (Sandbox Code Playgroud)
应用程序启动时出现错误*config.action_view.default_form_builder = ApplicationHelper :: AppFormBuilder*.
任何人都可以提供有关如何使其工作的指导?
ved*_*ant 14
正如官方文档中所提到的,在Rails 5中,正确的方法是在控制器中指定它.要使其适用于应用程序,只需在您的ApplicationController:
class ApplicationController < ActionController::Base
default_form_builder AppFormBuilder
end
Run Code Online (Sandbox Code Playgroud)
这更有意义.FormHelpers是视图层的一部分,而不是应用程序配置.
ApplicationHelper::AppFormBuilderapplication.rb 加载时还不需要。您可以尝试将其放入单独的初始化程序文件中(在 config\initializers 中创建一个):
module Web
class Application
ActionView::Base.default_form_builder = AppFormBuilder
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1410 次 |
| 最近记录: |