Ruby on rails 多态关联在rails admin上未正确显示
我刚刚将一些通知功能添加到我的应用程序中。但是,当我在rails管理员上检查通知时,它没有检测到关联的多态对象。 我只在开发中使用rails管理员。。因此,如果这是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
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">