Вопрос

У меня есть friendly_id а также ActiveScaffold Установлен для моего приложения Rails.

Потому что не у всех моих моделей есть уникальные поля имени, я должен использовать Модель с толчкой чтобы заставить это работать. Friendly_id делает работу безупречно, у меня есть дружеские URL -адреса, и я могу загрузить объекты, используя дружеский идентификатор.

Но когда я хочу создать новый объект с ActiveScaffold, в нем говорится следующее сообщение об ошибке:

ActiveScaffold :: reverseAssociationRequired (Ассоциация слизняков: чтобы поддержать: has_one и: has_many, где родительская запись новая, а детские записи подтверждают присутствие родителя, ActiveScaffold требует обратной ассоциации (принадлежности_TO).

Конечно, я не могу создать belongs_to ассоциация на этой стороне, потому что она создана friendly_id Модуль и каждая модель, которая работает с просеиванием, должен быть включен там.

Модель выглядит так:

class FooBar < ActiveRecord::Base
  has_friendly_id :name, :use_slug => true, :approximate_ascii => true
end

В моем 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

Есть ли способ сделать эту работу?

Версии: friendly_id 3.2.0, ActiveScaffold, последний в rails-2.3 Git Branch.

ОБНОВИТЬ: Похоже, что это не конфликт в режиме производства.

Это было полезно?

Решение

вызов

has_friendly_id :name, :cache_column => 'cached_slug', :use_slug => true

... Создает has_many, а у A есть одна ассоциация, указывающие на модель Slug AR, которая не имеет полиморфного, принадлежит должным образом ассоциации.

Поэтому в основном вам нужно сделать, чтобы решить эту ошибку, - это определить обратные ассоциации в контроллере вашей родительской модели (тот, у кого есть вещи friendly_id)

  active_scaffold :products do |config|
    ...
    config.columns[:slug].association.reverse = :product
    config.columns[:slugs].association.reverse = :product
  end

И это работает :-)

PS: я использую Friendly_id в качестве Gem и ActiveScaffold VHO Master Branch для Rails 3

Другие советы

В прошлом у меня такая же проблема, я решил, но я не помню свое решение, посмотрите на свой код, единственный соответствующий взлом - использовать friendly_id в качестве плагина и наконец загрузить его с помощью config.plugin в Environment.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

Я не уверен, извините, но если вы попытаетесь сообщить мне.

Извините за мой английский

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top