Ruby on rails 多态关联在rails admin上未正确显示

Ruby on rails 多态关联在rails admin上未正确显示,ruby-on-rails,polymorphic-associations,rails-admin,ruby-on-rails-4.1,Ruby On Rails,Polymorphic Associations,Rails Admin,Ruby On Rails 4.1,我刚刚将一些通知功能添加到我的应用程序中。但是,当我在rails管理员上检查通知时,它没有检测到关联的多态对象。 我只在开发中使用rails管理员。。因此,如果这是rails管理错误,那么我很乐意离开它。然而(而且很有可能)如果我做错了什么,我需要修复它 我应该提到-这在数据库中起作用,在站点的任何地方都起作用,rails admin除外 我的模型 class Notification < ActiveRecord::Base belongs_to :notified, polymor

我刚刚将一些通知功能添加到我的应用程序中。但是,当我在rails管理员上检查通知时,它没有检测到关联的多态对象。 我只在开发中使用rails管理员。。因此,如果这是rails管理错误,那么我很乐意离开它。然而(而且很有可能)如果我做错了什么,我需要修复它

我应该提到-这在数据库中起作用,在站点的任何地方都起作用,rails admin除外

我的模型

class Notification < ActiveRecord::Base
  belongs_to :notified, polymorphic: true
  belongs_to :object, polymorphic: true
  belongs_to :user

  scope :not_seen, -> { where(seen: false) }
  scope :not_clicked, -> { where(clicked: false) }


  def self.send_notifications(user, message, object, subscribers, mailer = nil, mailer_object = nil)
    subscribers.uniq.each do |subscriber|
      self.create({user: user, message: message, notified: subscriber, object: object}) unless subscriber.get_user_id == user.id
      UserMailer.send(mailer, subscriber, mailer_object).deliver unless mailer.nil? || subscriber.get_user_id == user.id
    end
  end

end
以下是它在控制台上的外观:

<Notification id: 7, user_id: 1, message: " has left a comment on ", notified_id: 2, notified_type: "Programme", created_at: "2015-10-09 12:51:07", updated_at: "2015-10-09 12:51:07", seen: true, clicked: true, object_id: 54, object_type: "Applicant">

从上面可以看到,填充了
object\u id
object\u type
(54,申请人)

但在Rails管理中,我得到了以下信息:

它检测到模型是申请人,但没有看到ID


有什么想法吗?

您似乎发现了Rails所遭受的罕见且令人困扰的名称冲突之一。这一点在报告中提到得太简短了

3.2避免名称冲突

你不能随意为你的社团使用任何名字。因为 创建关联会将具有该名称的方法添加到模型中,它 给关联起一个已经被使用的名称是一个坏主意 ActiveRecord::Base的实例方法。关联方法将 重写基本方法并破坏内容。例如,属性或 连接是关联的坏名称

object\u id
由Ruby在所有对象上定义。它返回标识对象的数字ID,不幸的是(正如您所发现的),有可能用另一个方法覆盖此方法,这是在创建名为
object
的关联时发生的情况

从名为
object\u id
的列的表实例化模型时,会自动添加
object\u id
属性。在某些情况下,调用
object\u id
方法来标识对象,但返回的值来自属性。这就是问题所在


重命名关联可能是解决这一问题的唯一方法。

您似乎已经发现了Rails遭受的罕见且令人困扰的名称冲突之一。这一点在报告中提到得太简短了

3.2避免名称冲突

你不能随意为你的社团使用任何名字。因为 创建关联会将具有该名称的方法添加到模型中,它 给关联起一个已经被使用的名称是一个坏主意 ActiveRecord::Base的实例方法。关联方法将 重写基本方法并破坏内容。例如,属性或 连接是关联的坏名称

object\u id
由Ruby在所有对象上定义。它返回标识对象的数字ID,不幸的是(正如您所发现的),有可能用另一个方法覆盖此方法,这是在创建名为
object
的关联时发生的情况

从名为
object\u id
的列的表实例化模型时,会自动添加
object\u id
属性。在某些情况下,调用
object\u id
方法来标识对象,但返回的值来自属性。这就是问题所在


重命名关联可能是解决这个问题的唯一方法。

对象
是一个不幸的名称选择,因为
\object\u id
已经被定义为Ruby对象上的一个方法。我不知道这是否是问题的根源,但是你可以考虑将<代码>对象< /代码>改为其他的东西来避免潜在的问题。谢谢!这就是问题的根源。如果你能回答这个问题,我很乐意接受。我也这么怀疑。名称冲突可能很难调试。
object
是一个不幸的名称选择,因为
#object\u id
已经定义为Ruby对象上的方法。我不知道这是否是问题的根源,但是你可以考虑将<代码>对象< /代码>改为其他的东西来避免潜在的问题。谢谢!这就是问题的根源。如果你能回答这个问题,我很乐意接受。我也这么怀疑。名称冲突可能很难调试。
self.create({user: user, message: message, notified: subscriber, object: object}) unless subscriber.get_user_id == user.id
<Notification id: 7, user_id: 1, message: " has left a comment on ", notified_id: 2, notified_type: "Programme", created_at: "2015-10-09 12:51:07", updated_at: "2015-10-09 12:51:07", seen: true, clicked: true, object_id: 54, object_type: "Applicant">