Придумайте конфликт между администраторами Rails - PullRequest
4 голосов
/ 16 мая 2011

Rails Admin работал нормально, пока я не установил Devise_Invitable. Теперь, когда я нажимаю на Users в Rails Admin, я получаю следующую ошибку:

NoMethodError in RailsAdmin::MainsController#list

You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.map

Другие модели работают нормально.

У меня есть догадка, что это может быть частью проблемы:

https://github.com/sferik/rails_admin/issues/370

, поскольку это является частью devise_invitable

 belongs_to :invited_by, :polymorphic => true

В нем говорится, что проблема исправлена, но есть ли способ, которым я не имею самого последнего администратора rails?

Gemfile

gem 'rails_admin', :git => 'git://github.com/sferik/rails_admin.git'

Спасибо за любые идеи.

Ответы [ 2 ]

4 голосов
/ 11 июля 2011

Ответ, в котором вы добавляете has_many :invitees, :class_name => self.class.name, :as => :invited_by к модели User, работает, чтобы заставить rails_admin работать, но у меня возникли проблемы с удалением и редактированием .Решение состоит в том, чтобы изменить строку, которую вы добавляете в модель User, на:

has_many :invitees, :class_name => "User", :as => :invited_by
4 голосов
/ 14 июня 2011

К сожалению, полученная вами трассировка стека (и та, что в этой проблеме GitHub) очень распространена в rails_admin - все, что на самом деле означает, что ассоциация не может быть автоматически обнаружена.Это исправление, как вы обнаружили, неприменимо к взаимодействию с devise_invitable.

NoMethodError происходит потому, что гем devise_invitable (по состоянию на 0.5.0) объявляет только belongs_to половину invited_by отношения.rails_admin не может полностью понять это частично объявленное отношение и barfs.

Мы смогли исправить это в нашем приложении, добавив следующее в нашу модель Devise:

class User < ActiveRecord::Base

  # Create an explicit User.invitees => [User, User, …] relationship
  # so that rails_admin can correctly discover this relationship.
  has_many :invitees, :class_name => self.name, :as => :invited_by       

  …

end

Есливы бы вообще не следили за отношением приглашающий / приглашенный, вы могли бы разветвлять гем devise_invitable и удалить эту функциональность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...