将 local: true 设置为 Rails 中 form_with 的默认值 5

Set local: true as default for form_with in Rails 5

我正在做一个项目,我们不会使用 ajax 调用来提交表单,所以我需要在项目的每个表单中放置 local: true,如中所示rails docs:

:local - By default form submits are remote and unobstrusive XHRs. Disable remote submits with local: true.

有什么方法可以将本地选项默认设置为 true 吗?

我们正在使用 Rails 5 form_with 助手,如下所示:

<%= form_with(model: @user, local: true) do |f| %>
    <div>
        <%= f.label :name %>
        <%= f.text_field :name %>
    </div>

    <div>
        <%= f.label :email %>
        <%= f.email_field :email %>
    </div>
    <%= f.submit %>
<% end %>

考虑覆盖 form_with 方法:

# form_helper.rb
def form_with(options)
  options[:local] = true
  super options
end

这应该可以解决您应用程序中每个表单的问题。

正如您所说,可以使用 local: true 按表格进行设置。但是可以使用配置选项 [form_with_generates_remote_forms][1] 全局设置它。此设置决定 form_with 是否生成远程表单。它默认为 true。

把这个配置放在哪里? Rails 提供 four standard spots 来放置这样的配置。但是您可能希望在所有环境(即开发、生产……)中都使用此配置。所以要么在初始化程序中设置它:

# config/initializers/action_view.rb
Rails.application.config.action_view.form_with_generates_remote_forms = false

或者更常见的设置在 config/application.rb.

# config/application.rb
module App
  class Application < Rails::Application
    # [...]

    config.action_view.form_with_generates_remote_forms = false
  end
end

Rails配置可以在config/application.rb文件中设置。

module App
  class Application < Rails::Application
    # [...]

    config.action_view.form_with_generates_remote_forms = false
  end
end

Guy C 的回答很好,但是将所有配置放在这个文件中而不是单独的初始化程序中更为惯用;这是大多数 Rails 开发人员所期望的。

请注意,如果仅 config/development.rb 或其他 env 特定文件,这将带来灾难。