如何将当前记录ID作为rails中的隐藏字段传递?

时间:2012-08-21 08:23:46

标签: ruby-on-rails forms hidden-field

我有一个页面用于查看每个客户,然后在其底部有一个表单以输入新许可证,我希望该表单自动用当前页面客户的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

2 个答案:

答案 0 :(得分:7)

尝试 <%= f.hidden_field :customer_id, :value => @customer.id %>

答案 1 :(得分:2)

虽然隐藏字段是跨查询传递值的好方法,但它们并不安全,尤其是当您使用从客户端收到的值修改数据库记录时。

考虑一个场景,您的客户端是技术人员,并使用Firebug或类似工具修改隐藏字段的值。每个人都知道数据库表ID是增量的。您最终将为错误的客户创建许可证。

在我看来,一个好方法是获取与您当前登录的用户(您可能正在进行会话)相关的客户,然后为该客户创建许可证。或者,您可以将客户ID存储在会话中,然后相应地创建许可证。

请阅读Rails Security Guide