大佬教程收集整理的这篇文章主要介绍了ruby-on-rails – 序列化哈希字段和简单格式,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
class Page < ActiveRecord::Base belongs_to :category serialize :fields end
字段的值取决于类别.但作为一个例子;
{"address" => "8 finance street,hong kong","founded" => "1973"}
在这个例子中,该类别定义了“地址”和“已建立”作为自定义字段.
我想要的是说
= simple_form_for(@pagE) do |f| = f.association :category - f.object.category.fields.each do |field| = f.input field.name
但是我需要做一些魔术来处理@ page.founded无效的事实
相反,我应该看看@page.fields [“成立”].
有什么建议么?
更新:
我有点近了
- if f.object.category - f.object.category.fields.each do |field| = f.input field.name do = text_field_tag "post[fields][#{field.namE}]",f.object.fields[file.name]
现在需要使这个DRYer(不想指定对象的名称).
我会看看是否可以为此写一个体面的简单表单扩展.
class Page include Mongoid::Document field :fields,type: Hash end
我的情况可能略有不同,尽管我已经知道我正在寻找的哈希键,只需要simple_fields_for来处理哈希字段.我使用的天真的方法(基本字段为使用)看起来像这样:
= simple_form_for(@pagE) do |f| = f.simple_fields_for :fields do |ff| = ff.input :address = ff.input :founded
但是没有正确填写表单. nicholaides将结构化哈希的解决方案用于我:
- require 'ostruct' = simple_form_for(@pagE) do |f| = f.simple_fields_for :fields,OpenStruct.new(@page.fields) do |ff| = ff.input :address = ff.input :founded
为了避免将OpenStruct的东西混合到我的视图中,我创建了一个用于simple_form的猴子补丁,以便将OpenStruct中的哈希类型自动包装,并将其放入初始化器中:
require 'ostruct' module SimpleForm::ActionViewExtensions::Builder def simple_fields_for_with_hash_support(*args,&block) if args[0] && !args[1] field = object.send(args[0]) args << OpenStruct.new(field) if field.respond_to?(:has_key?) end simple_fields_for_without_hash_support(*args,&block) end alias simple_fields_for_without_hash_support simple_fields_for alias simple_fields_for simple_fields_for_with_hash_support end
现在我可以使用我原来的天真的解决方案,没有特殊的视图代码.
以上是大佬教程为你收集整理的ruby-on-rails – 序列化哈希字段和简单格式全部内容,希望文章能够帮你解决ruby-on-rails – 序列化哈希字段和简单格式所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。