friendly_id y ActiveScaffold conflicto
-
13-10-2019 - |
Pregunta
friendly_id y ActiveScaffold instalado para mi aplicación Rails.
Debido a que no todos mis modelos tienen campos de nombre único que tengo que usar el Slugged modelo para hacer que funcione. friendly_id hace el trabajo sin problemas tengo URLs amigables y puedo cargar los objetos utilizando el ID de usar.
Pero cuando quiero crear un nuevo objeto con ActiveScaffold, dice el mensaje de error siguiente:
ActiveScaffold :: ReverseAssociationRequired (babosas Asociación: Para soporte: has_one y: has_many donde el registro padre es nuevo y el niño registro (s) validar la presencia de la padres, ActiveScaffold requiere la asociación inversa (la belongs_to).)
Por supuesto, no puedo crear la asociación belongs_to
en ese lado porque está creado por el módulo friendly_id
y cada modelo que funciona manera slugging deben incluirse allí.
Las miradas modelo como este:
class FooBar < ActiveRecord::Base
has_friendly_id :name, :use_slug => true, :approximate_ascii => true
end
En mi ApplicationController
:
class Admin::FooBarsController < Admin::ApplicationController
active_scaffold :foo_bar do |config|
config.list.columns = [ :id, :name ])
config.update.columns = [ :name ]
config.create.columns = config.update.columns
end
end
¿Hay una manera de hacer este trabajo?
Las versiones:. 3.2.0
friendly_id, ActiveScaffold último en la rama rails-2.3
git
Actualizar . Parece que no entre en conflicto en modo de producción
Solución
llamando
has_friendly_id :name, :cache_column => 'cached_slug', :use_slug => true
... crea un has_many y tiene uno asociaciones que apuntan a un modelo AR babosa que no tiene ninguna polimórfica pertenece a la asociación adecuadamente definido.
Así que básicamente lo que hay que hacer para resolver este error es definir las asociaciones inversas en el controlador de su modelo padre (el que tiene cosas friendly_id)
active_scaffold :products do |config|
...
config.columns[:slug].association.reverse = :product
config.columns[:slugs].association.reverse = :product
end
y funciona: -)
PS: Yo uso friendly_id como joya y rama principal ActiveScaffold VHO para los carriles 3
Otros consejos
En el pasado tengo el mismo problema, he resuelto, pero no recuerdo mi solución, lookin en mi código del truco sólo es relevante es el uso de friendly_id como plugin y cargarlo en el pasado con config.plugin en environemnt.rb
aviable_plugins = Dir.glob(RAILS_ROOT+"/vendor/plugins/*").collect {|i| i.split("/").last }
config.plugins = aviable_plugins + [:friendly_id] #friendly_id must be last
No estoy seguro, lo siento, pero si intenta dejar que mis conocimientos.
lo siento por mi Inglés a