首先,我相信swipl.exe
类型(地址,我想知道其他选项是什么?个人资料,帐户,详细信息...)不会保存给用户,它只是您需要的一个参数控制器方知道要更新配置文件的哪一部分(恕不建议在配置文件中保存form
参数)。因此,我猜您有某种多页表单,并且可以通过这种方式解决。
恕我直言,最简单的方法是保持url不变,并在表单中输入:
form
这将添加一个隐藏字段,但不在用户上下文中,因此它将为<%= simple_form_for current_user,url: profiles_path,wrapper: :input_group do |f| %>
<%= render_user_form(f,@form_type,self) %>
<%= hidden_field_tag :form,@form_type %>
<div class="action">
<%= f.submit 'Update',class: ''%>
</div>
<% end %>
。我相信这会更正确。
第二,关于您的方法,我有几点要点:
- 为什么不使用
params[:form]
单数?您希望将用户发送到他们的个人资料(这只是一个,对吗?)。在您的路线中,您可以写profile
。请参阅singular resource的文档(同时使用配置文件示例)
- 为什么不对配置文件的不同部分使用嵌套的资源:这也可以更自然地映射到您的数据模型(或者应该映射):用户有一个地址(当前可能有多个地址,交货,开具发票...)具有额外的信息,然后您的网址看起来就像
resource :profile
(这样您就不必笨拙地使用表单类型来处理profile/address/edit
)。
,
轨道(从技术上讲,它是机架)按名称属性嵌套输入。因此,如果您提交以下表格:
test[is.na(test)] <- Inf
test$G5 <- c("No","Yes")[(rowSums(test > 5) == ncol(test))+ 1]
您将获得以下参数哈希:
<form action="/somepath">
<input name="foo" value="1" type/>
<input name="bar[baz]" value="2" type/>
<input name="moo[woo]" value="3"/>
<input type="submit" value="send">
</form>
原始参数如下:
{
foo: 1,bar: {
baz: 2
},moo: {
woo: 3
}
}
Rack对这些参数的处理方式相同,无论它们是通过查询字符串发送还是以表单正文形式发送。
因此,如果您要在查询中将密钥作为foo=1&bar[baz]=2&moo[woo]=3
传递,则需要URL params[:user][:form]
。
您可以通过以下方式创建链接:
/profiles/edit?user[form]=address
,
已更新@Max更正
您的问题是如何将参数传递给edit
控制器动作(这是一个GET请求),以及表单如何将参数传递给update
控制器动作(这是一个POST)请求,因此表单值在请求正文中。)
对于GET请求,您经过?
的所有内容都会被“参数化”。
通过/profiles/edit?form=address
时,params[:form]
可用。
提交表单时,表单构建器通过使用model_name[attribute]
约定来命名嵌套输入。
要实现您的要求,您可以执行/profiles/edit?user[form]=address
恕我直言,您应该在两种情况下都使用params[:form]
而不是params[:user][:form]
。
通过不使用params[:form]
助手,可以部分获得simple_form
。
尝试使用标准text_field_tag而不是f.field
标签。确保将HTML名称值设置为form
:
text_field_tag 'form' @form_type
然后,在渲染视图时,您应该看到类似以下的内容:
您所拥有的:
<input id="user_form" name="user[form]" type="text" />
您要的内容:
<input id="form" name="form" type="text" />
此外,我建议您将参数转换为form_type
,因为SimpleForm可能使用#user_form
作为表单(<form id="user_form" ...>
)的ID,这将使通过ID获得的所有Javascript查找冲突。
本文链接:https://www.f2er.com/3047303.html