gpt4 book ai didi

ruby-on-rails - 在 Rails 中修改 params 哈希

转载 作者:行者123 更新时间:2023-12-04 15:25:42 24 4
gpt4 key购买 nike

我正在 Rails 中创建嵌套模型,但我想向 Controller 中的嵌套模型添加字段。我没有使用 hidden_​​field_tag 因为它可能被篡改。

这是我的参数哈希:

 Parameters: {"dummy"=>{"users_attributes"=>{"0"=>{"email"=>"jjjj@gmail.com", "id"=>"", "_destroy"=>"false"}, "1"=>{"email"=>"qqq@gmail.com", "id"=>"", "_destroy"=>"false"}}}, "commit"=>"Create Dummy"}

我想要的是每个 user_attributes 下都有一个名为 companyid 的字段。假设我希望 companyid 是“company”,然后我认为这会起作用:
len = params["dummy"]["users_attributes"].size
counter = 0
while counter < len
params["dummy"]["users_attributes"][counter]["companyid" => "company"]
counter = counter + 1
end

但是,我在 while 循环中的第一行收到“undefined method `[]' for nil:NilClass”错误。我不确定为什么。

有人可以帮我修改参数哈希吗?

编辑:
所以,我终于想通了。我并没有真正使用任何解决方案。首先,我将 companyid 的 hidden_​​field 标记设置为空白。然后,在我的 Controller 中,我输入:
 params["dummy"]["users_attributes"].each do |key, val|
params["dummy"]["users_attributes"][key]["companyid"] = "company"
end

不是最优雅的代码,但它会工作。

最佳答案

params 散列是特殊的,因为(尤其是对于表单)它与它相关的模型一对一映射,并且 Rails 期望有一个数据库列,或者模型中具有该名称的方法.

隐藏字段是获取额外数据问题的典型解决方案,但如果您不希望用户看到这些字段,就会遇到 HTTP 是无状态的问题。所以在这种情况下,session[:something]是你的 friend 。在显示可能包含隐藏数据的表单或页面之前,将数据添加到 session 变量(先加密),然后您可以在用户提交表单时读取(和解密)该变量。或者,您可以将其保存在数据库表中,并仅将行 ID 放入 session 中,以便在发布表单时可以读回数据。

如果数据是模型的一部分,但您只是不想显示它,则可以只显示用户在 View 中可以看到的部分,然后在用户提交时在 Controller 操作中查找其余部分表格或请求。

如果数据不敏感,您可以确保将用户可以更改的值声明为 attr_accessible在他们各自的模型中(防止质量分配)并将其他模型放在隐藏字段中。

关于ruby-on-rails - 在 Rails 中修改 params 哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9793790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com