5

当我使用 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]、params[:密码]等?

谢谢!
拉姆库马尔

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

4

2 回答 2

3

you can explicitly define the name for an input by passing input_html to it:

  input_html: { name: :name }

(needed this myself for sending an resource to a thirdparty endpoint with redirect to my side which relied on the plain attribute names, but i actually wanted not to built up label and input via the tags ;) )

also see simple form builder impl

于 2014-09-12T14:04:48.180 回答
1

我能想到的两种方法:

第一个是,不要使用simple_form来构建您的表单,而是手动或使用form_tagand*_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
于 2013-03-01T22:19:22.020 回答