我有一个页面用于查看每个客户,然后在其底部有一个表单以输入新许可证,我希望该表单自动用当前页面客户的ID填充隐藏字段。这是我隐藏字段的代码:
<%= f.hidden_field :customer_id, :value => '1' %>
我目前将值设置为1,这有效,但我需要它来自动使用ID。这就是我的控制器中的观点:
def show
@customer = Customer.find(params[:id])
@license = License.find_by_customer_id(@customer.id)
@software = Software.all
@licenses = License.new
respond_to do |format|
format.html # show.html.erb
format.json { render json: @customer }
end
end
答案 0 :(得分:7)
尝试
<%= f.hidden_field :customer_id, :value => @customer.id %>
答案 1 :(得分:2)
虽然隐藏字段是跨查询传递值的好方法,但它们并不安全,尤其是当您使用从客户端收到的值修改数据库记录时。
考虑一个场景,您的客户端是技术人员,并使用Firebug或类似工具修改隐藏字段的值。每个人都知道数据库表ID是增量的。您最终将为错误的客户创建许可证。
在我看来,一个好方法是获取与您当前登录的用户(您可能正在进行会话)相关的客户,然后为该客户创建许可证。或者,您可以将客户ID存储在会话中,然后相应地创建许可证。