当我使用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中。在极少数情况下(忘记密码),我实际上需要提供一个表单,我正在寻找一种方法来使用这些方法。
答案 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 }
(我自己需要将资源发送到第三方端点,重定向到我这边依赖于普通属性名称,但我实际上不想通过标签构建标签和输入;)