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

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top