simple_form_for:从params中删除根模型名称

时间:2013-03-01 22:08:23

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

当我使用simple_form_for @model创建表单时,提交后params具有在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]发布, params [:密码]等?

谢谢!
Ramkumar

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

2 个答案:

答案 0 :(得分:1)

我能想到的两种方式:

首先,不要使用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

答案 1 :(得分:1)

您可以通过将input_html传递给它来显式定义输入的名称:

  input_html: { name: :name }

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

另见simple form builder impl