clipend_id и конфликт ActiveScaffold
-
13-10-2019 - |
Вопрос
У меня есть 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
Я не уверен, извините, но если вы попытаетесь сообщить мне.
Извините за мой английский