【问题标题】:simple_form_for: Removing root model name from paramssimple_form_for:从参数中删除根模型名称
【发布时间】:2013-02-16 12:59:31
【问题描述】:

当我使用 simple_form_for @model 创建表单时,提交后的参数具有分组在 params[model] 下的所有属性。如何让 simple_form 删除此分组并直接发送(在 params root 下)?

<%= simple_form_for @user, do |f| %>
<%= f.input :name %>
<%= f.input :password %>
<%= f.submit %>

现在名称和密码属性通常会在 params[:user][:name]、params[:user][:password] 等下发送。如何让 simple_form 将这些作为 params[:name] 发布,参数 [:密码] 等?

谢谢!
拉姆库马尔

ps:如果你想知道我为什么需要这个,我的应用程序的大部分是作为一个 API 服务的,我已经构建了一组方法来验证一个请求,这些请求期望某些属性位于根目录中。在极少数情况下(忘记密码),我实际上需要提供一个表格,并且我正在寻找一种使用这些方法的方法。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 forms simple-form


    【解决方案1】:

    您可以通过将 input_html 传递给输入来明确定义输入的名称:

      input_html: { name: :name }
    

    (我自己需要这个来将资源发送到第三方端点并重定向到我这边,这依赖于普通属性名称,但我实际上不想通过标签建立标签和输入;)

    另见simple form builder impl

    【讨论】:

    • 非常感谢!花费大量时间直到找到您的解决方案。
    【解决方案2】:

    我能想到的两种方法:

    首先,不要使用simple_form 来构建您的表单,而是手动或使用form_tag*_tag 方法来构建。这些将允许您更详细地指定表单中使用的参数。

    如果你想保留simple_form,那么让它调用一个不同的控制器动作。重构控制器以将逻辑剥离到单独的方法中。比如:

    class UsersController
      def create_from_api
        controller_logic(params)
      end
      def create_from_form
        controller_logic(params[:user])
      end
      def controller_logic(params)
        [actual work happens here]
      end
    end
    

    【讨论】:

    • 谢谢。重构它是:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多