繁体   English   中英

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

[英]How to change value in params array in Ruby on Rails?

我有一个实例,我正在记录供应商的水价。 我的供应商模型有: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 ,但是在更新完整记录时这似乎很奇怪。 (编辑表单包含所有对象属性的所有字段。)Anywho,我愿意接受想法和建议。
谢谢!!

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

好吧,为什么不改变vendor_params ...我不关心params? 好吧,vendor_params仍然指出原始params哈希,假设它看起来像:

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

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

修改ruby hash到位(rails strong params)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM