3

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

2 回答 2

8

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

于 2012-08-21T08:28:06.800 回答
2

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

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

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

请阅读Rails 安全指南

于 2012-08-21T08:37:53.543 回答