Ruby on Rails:有没有更好的方法来实现我开发的这个"preview"功能?



我有这个"预览";功能。该按钮出现在编辑页面中,单击后将带用户进入一个新页面,显示打印/下载表单时的样子。这个";预览";该功能将在表单中显示数据,而不保存到数据库中。例如,如果我改变";注意:字段值来自";注释";至";编辑笔记";,在预览页面中;编辑笔记";但在数据库中,该值仍然是"0";注意";。

我已经实现了这一点,我将表单数据发送到预览方法,然后通过assign_attributes()将数据分配给现有记录。问题是,表单数据包含太多嵌套属性,因此链接太长,这是GET方法。我认为这不是一件好事,不是吗?那么,在不在url中显示params的情况下,还有其他方法可以实现这一点吗?或者在链接分类器中制作参数的方法?

这是代码,很抱歉没有使用我的实际代码,但逻辑相同
编辑url:/modul/:id/edit
预览url:/modul/:id/preview?long_parameter

查看

<%= button_tag 'Preview', type: "button", class: "btn btn-outline-success mr-1", id: "preview" %>

$("#preview").click(function(){
var params = $("#record_form").serialize()
window.location = "preview?" + params
})

控制器

def preview
# I'm using this logic 'cause @existing_record.assign_attributes(record_params) didn't update the children and grandchildren attributes
@existing_record.children.each do |child|
child_params = record_params[:children_attributes].values.select{|v| v[:id].to_i == child.id}.first
child.assign_attributes(child_params.except(:grandchildren_attributes))
child.grandchildren.each do |granchild|
grandchild_params = child_params[:grandchildren_attributes].values.select{|v| v[:id].to_i == grandchild.id}.first
grandchild.assign_attributes(grandchild_params)
end
end
end

为此,我将使用浏览器LocalStorage并序列化深度嵌套的数据结构,以便在用户准备好保存到数据库之前,所有内容都保持在前端。

最新更新