【问题标题】:Set local: true as default for form_with in Rails 5在 Rails 5 中将 local: true 设置为 form_with 的默认值
【发布时间】:2017-12-14 22:08:29
【问题描述】:

我正在做一个项目,我们不会使用 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 %>

【问题讨论】:

  • 你解决过这个问题吗?
  • 并非如此。必须为每个表单设置local: true

标签: ruby-on-rails-5 ruby-on-rails-5.1


【解决方案1】:

正如您所说,可以使用local: true 在每个表单的基础上进行设置。但是可以使用配置选项[form_with_generates_remote_forms][1] 全局设置它。此设置确定 form_with 是否生成远程表单。默认为真。

把这个配置放在哪里? 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

【讨论】:

  • 为了后代:这是比我上面建议的解决方案更好的解决方案 (stackoverflow.com/a/49492613/1146473)
  • 更新了更多关于放置配置的信息(根据生态学的回答)。
【解决方案2】:

考虑重写form_with 方法:

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

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

【讨论】:

    【解决方案3】:

    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 的文件,则会造成灾难。

    【讨论】:

    • 这应该是公认的答案。 +1 在大多数开发人员期望的位置更改配置。
    猜你喜欢
    • 2018-11-05
    • 2021-03-17
    • 1970-01-01
    • 2014-10-09
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    相关资源
    最近更新 更多