asegurarse que guardamos todo como objectos naturales de ruby
This commit is contained in:
parent
02733728a3
commit
586f4c5824
2 changed files with 24 additions and 8 deletions
|
@ -54,8 +54,7 @@ class PostsController < ApplicationController
|
|||
@site = find_site
|
||||
@lang = find_lang(@site)
|
||||
@post = find_post(@site)
|
||||
|
||||
@post.update_attributes(post_params)
|
||||
@post.update_attributes(repair_nested_params(post_params))
|
||||
|
||||
if @post.save
|
||||
redirect_to site_posts_path(@site, category: session[:category], lang: @lang)
|
||||
|
@ -70,4 +69,19 @@ class PostsController < ApplicationController
|
|||
def post_params
|
||||
params.require(:post).permit(@post.template_params)
|
||||
end
|
||||
|
||||
# https://gist.github.com/bloudermilk/2884947#gistcomment-1915521
|
||||
def repair_nested_params(obj)
|
||||
obj.each do |key, value|
|
||||
if value.is_a?(ActionController::Parameters) || value.is_a?(Hash)
|
||||
# If any non-integer keys
|
||||
if value.keys.find {|k, _| k =~ /\D/ }
|
||||
repair_nested_params(value)
|
||||
else
|
||||
obj[key] = value.values
|
||||
value.values.each {|h| repair_nested_params(h) }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
|
@ -196,12 +196,10 @@ class Post
|
|||
|
||||
# imita Model.update_attributes de ActiveRecord
|
||||
def update_attributes(attrs)
|
||||
# el cuerpo se maneja por separado
|
||||
@content = attrs.delete('content') if attrs.key? 'content'
|
||||
# convertir los hashes en arrays si los campos son anidados
|
||||
# usamos to_h por todos lados porque sino son
|
||||
# usamos to_hash por todos lados porque sino son
|
||||
# HashWithIndifferentAccess
|
||||
attrs = attrs.to_h.map do |k,v|
|
||||
_attrs = attrs.to_hash.map do |k,v|
|
||||
t = template_fields.find { |t| t.key == k }
|
||||
if t
|
||||
# Subir la imagen!
|
||||
|
@ -224,14 +222,17 @@ class Post
|
|||
end
|
||||
|
||||
if t.nested?
|
||||
v = t.array? ? v.values.map(&:to_h) : v.to_h
|
||||
v = t.array? ? v.map(&:to_hash) : v.to_hash
|
||||
end
|
||||
end
|
||||
|
||||
{ k => v }
|
||||
end.reduce(Hash.new, :merge).stringify_keys
|
||||
|
||||
merge_with_front_matter! attrs
|
||||
# el cuerpo se maneja por separado
|
||||
@content = _attrs.delete('content') if _attrs.key? 'content'
|
||||
|
||||
merge_with_front_matter! _attrs
|
||||
end
|
||||
|
||||
# Requisitos para que el post sea válido
|
||||
|
@ -306,6 +307,7 @@ class Post
|
|||
end
|
||||
end
|
||||
|
||||
# TODO convertir a hash para que sea más fácil buscar uno
|
||||
def template_fields
|
||||
return [] unless template
|
||||
@template_fields ||= template.front_matter.map do |key, contents|
|
||||
|
|
Loading…
Reference in a new issue