我想要实现的功能是根据用户当前所处的操作设置不同的字段。
通用脚手架将表单捆绑为部分并将其呈现在新和编辑操作中。在典型的注册情况下,可能不希望每次更新配置文件时都更新密码。我过去用来解决这个问题的一种方法是为 new 和 edit 创建单独的表单;包括新密码。显然,大多数领域都在重复。是否有办法保留部分但省略(从而不更新)每个操作的表单上的某些字段?
答案 0 :(得分:6)
让我假设您正在构建用户模型的表单。所以在控制器中您将拥有
def new
@user = User.new
.....
end
def edit
@user = User.find(params[:id])
....
end
以部分使用形式
<% if @user.new_record? %>
<%= f.field_type :field_name %>
<% end %>
在编辑/更新期间,这不会渲染字段。
答案 1 :(得分:0)
您可以通过以下方式尝试:
<% if params[:action] == "new" %>
<%= f.field_type :field_name %>
<% end %>
但你应该考虑一下安全性,因为这并不能阻止攻击者手动添加POST字段来写入你表格中显示为字段的字段!
答案 2 :(得分:0)
您可以使用方法'new_record?'检查传递给视图的活动记录对象(例如@user)是新记录还是旧记录对象。基于此,您可以决定要显示的字段。 或者,您也可以使用partial,然后传递一些值(很可能是布尔值),并根据该值确定要渲染的字段。 这可以这样做: 渲染:部分=&gt; 'partial_name',:locals =&gt; {:bool =&gt;真}
然后在你的部分做
<% if bool == true %>
<%= f.xyz_tag :name %> //whatever field you want
<% end %>