如何在Ruby on Rails中的params数组中更改值?

伊塞尔吉奥

我有一个实例,我在记录供应商的水价。我的供应商模型有:price但是,我想让用户选择输入不同数量的价格,并为他们做简单的划分,而不是让他们这样做。换句话说,用户应该能够输入每升1.99美元或每加仑3.99美元的价格,依此类推。为此,我需要在表单中添加一个虚拟属性:unit,因为我不想在表中存储单位。一切正常,除了vendor_params[:price]在更新记录或创建新记录之前似乎无法更新之外这似乎应该走个小路,但是我一天中的大部分时间都在Google上搜索,因此不知道如何使它工作。
这是我所拥有的:

模型:

class Vendor < ActiveRecord::Base
   attr_accessor :unit
...
end

形式:

<%= form_for(@vendor) do |f| %>
...
<div class="field">
    <%= f.label :price %><br>
    <%= f.text_field :price %>
    <%= select( "unit", "id", { "1 Liter" => "1", "Bottle (2 liters)" => "2", "Jerry Can  (20 liters)" => "20"}) %>
</div>
...
<% end %>

控制器:

...
def update 

vendor_params[:price] = vendor_params[:price].to_f/params[:unit][:id].to_f

respond_to do |format|
  if @vendor.update(vendor_params)
    format.html { redirect_to @vendor, notice: 'Vendor was successfully updated.' }
    format.json { head :no_content }
  else
    format.html { render action: 'edit' }
    format.json { render json: @vendor.errors, status: :unprocessable_entity }
  end
end
...
end

我知道vendor_params[:price].to_f/params[:unit][:id].to_f返回正确的值。我似乎无法vendor_params[:price]在更新记录之前将该值分配给该值我还尝试了以下引发错误的操作:

@vendor_params[:price] = vendor_params[:price].to_f/params[:unit][:id].to_f

看来这应该是微不足道的!我想我可以使用form_tag代替form_for,但是在更新完整记录时似乎很奇怪。(编辑表单具有所有对象属性的所有字段。)任何人,我都欢迎提出想法和建议。
谢谢!!

rsahai91

如果vendor_params是strong_params方法(我假设是),那么它实际上会创建一个新的哈希。因此,当您更改vendor_params ...时,您实际上并没有更改原始的params哈希。

好的,为什么vendor_params没变...我不在乎params?好吧,vendor_params仍然指向原始params哈希,假设它看起来像:

def vendor_params
  params.require(:vendor).permit(:price)
end

我认为下面的链接是一个类似的问题,可能会提出一个有用的解决方案。希望我能正确理解您的问题!

在适当位置修改ruby hash(使用强参数)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章