当前,我正在尝试在我称为:section_text
的哈希中更新单个键“ elementOne”的值。哈希看起来像这样:
section_text => {"elementOne" => "words", "elementTwo" => "other words"}
这是我的模特:
class DynamicElement < ApplicationRecord
has_many :dynamic_page_elements
has_many :dynamic_pages, :through => :dynamic_page_elements
store :section_text, accessors: [ :elementOne, :elementTwo ]
end
我的表单文本区域:
<%= form.text_area :elementOne, value: dynamic_element.section_text["elementOne"] %>
<div class="actions">
<%= form.submit %>
强大的参数
def dynamic_element_params
params.require(:dynamic_element).permit(:style, :description, :section_text, :elementOne)
end
当我运行更新(从“ Birthday Gifts !!!”到“ Birthday Gifts !!!?”)时,参数完全显示了我的期望,并且当SQL代码开始运行时,它甚至开始替换有关的确切键值对。
但是,正如您所看到的,在密钥后面附加了“ ---!ruby / hash:ActiveSupport :: HashWithIndifferentAccess”,这阻止了更新的进行,更不用说它不是我最初想要的格式了。
********终端图片下方*********
如何防止这种情况,以便可以按原样保存新值? 我做了一些阅读,从发现的结果看,似乎是Rails正在通过默认的序列化程序YAML对其进行序列化?
这时有些迷失,不胜感激! (使用postgresql)
编辑 我什至在这里走这条路的最佳途径吗?
答案 0 :(得分:0)
您正在寻找的可能是:
elem = DynamicElement.joins(:dynamic_page_elements).find_by!(
dynamic_page_elements: params.slice(:dynamic_page_id),
description: "SectionOne",
)
new_section_text = elem.section_text.merge(dynamic_element_params)
elem.update(section_text: new_section_text)
一些提示:
nil
-它们是错误的常见来源,并导致您的代码为"timid" merge!
,使更改保持离散并易于跟踪element.update(derp)
在做什么