在Rails中获取多态关系表名称的方法。元编程

6英尺丹

我想测试多态子级是否属于父级。

@event.eventable_id == @current_user.id and @event.eventable_type == current_user.class.name

现在,这很丑陋,不应该出现在这样的视图中。但我想对每个多态对象进行此检查。因此,我需要一种元编程方式来找出多态关系表的命名方案。

phone to phonable
social to sociable
etc.

该方法看起来像这样。

if @event.belongs_to(current_user) #<NoMethodError: undefined method `belongs_to' for #<Event:

因此,我需要一个辅助方法来检查多态关系。如果我能得到像这样的任何多态孩子的名字方案

@event.polymorphic_relationship_table_name

然后,我可以将其合并到元编程助手中。如果已经有为此解决方案,请告诉我。

6英尺丹

我得到了它!这是获取多态关系名称方案的答案。

@event.class.reflect_on_all_associations(:belongs_to).first.name
=> :eventable # this is the ouput

我可以将任何对象实例放在 .class.reflect_on_all_associations(:belongs_to).first.name

对此最有帮助的文档是Ryan Stenberg撰写的从ActiveRecord :: Base Classes识别外键依赖项

:-)


用法示例

首先是一个辅助方法。

app / helpers / application_helper.rb

module ApplicationHelper    
  def child_and_parent?(obj, user)
    obj_id = Integer(eval "obj.#{obj.class.reflect_on_all_associations(:belongs_to).first.name}_id")
    obj_type = String(eval "obj.#{obj.class.reflect_on_all_associations(:belongs_to).first.name}_type")
    (user.id == obj_id) and (user.class.name == obj_type)
  end
end

然后在视图中使用它删除不属于当前用户的功能。

app / views / events / index.html.erb和app / views / events / show.html.erb

<% if child_and_parent? @event, current_user %>
  <li><%= link_to 'Edit', edit_event_path(@event) %></li>
  <li><%= link_to 'Delete', @event, method: :delete, data: { confirm: 'Are you sure?' } %></li>
<% end %>

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Rails从关系中访问多态数据

来自分类Dev

无法获取“多态关系”中的数据

来自分类Dev

急切加载:如何从具有多态关系的表中获取几张照片

来自分类Dev

Laravel:如何使用多态关系雄辩模型从表中轻松获取值?

来自分类Dev

以编程方式获取表之间的关系mysql

来自分类Dev

从 Rails 中的多态表中检索数据

来自分类Dev

在多对多关系中无法在中间表基础关系上获取名称

来自分类Dev

与名称空间的多态雄辩关系

来自分类Dev

Angularjs应用程序中的多态Rails关系

来自分类Dev

检索Rails 4中的多态关系列表

来自分类Dev

在Rails中以多态关系为“喜欢”按钮构建表单

来自分类Dev

从关系表中获取与额外信息的关系

来自分类Dev

Ember和Rails多态关系

来自分类Dev

Typeinfo如何在多态集合中获取类的名称/ ID?

来自分类Dev

Typeinfo如何在多态集合中获取类的名称/ ID?

来自分类Dev

即使我已经设置了关系,也为多态关系获取未定义的方法

来自分类Dev

在MVC 4中获取表标题名称的最佳方法

来自分类Dev

如何从Nhibernate元数据获取表依赖关系?

来自分类Dev

如何从Nhibernate元数据获取表依赖关系?

来自分类Dev

Laravel-雄辩的:与名称空间的多态关系

来自分类Dev

Laravel-雄辩的:与名称空间的多态关系

来自分类Dev

Rails/ActiveRecord:我可以与具有不同 id 类型的表建立多态关系吗?

来自分类Dev

原则2中的多态关系

来自分类Dev

SQLAlchemy中的多态所属关系?

来自分类Dev

如何在 rails 5 中获取关联的多态对象?

来自分类Dev

从表中获取与Eloquent关联的关系

来自分类Dev

如何从关系表中获取ID,Laravel

来自分类Dev

从3个关系表中获取数据

来自分类Dev

在关系mysql表中获取外部ID

Related 相关文章

  1. 1

    Rails从关系中访问多态数据

  2. 2

    无法获取“多态关系”中的数据

  3. 3

    急切加载:如何从具有多态关系的表中获取几张照片

  4. 4

    Laravel:如何使用多态关系雄辩模型从表中轻松获取值?

  5. 5

    以编程方式获取表之间的关系mysql

  6. 6

    从 Rails 中的多态表中检索数据

  7. 7

    在多对多关系中无法在中间表基础关系上获取名称

  8. 8

    与名称空间的多态雄辩关系

  9. 9

    Angularjs应用程序中的多态Rails关系

  10. 10

    检索Rails 4中的多态关系列表

  11. 11

    在Rails中以多态关系为“喜欢”按钮构建表单

  12. 12

    从关系表中获取与额外信息的关系

  13. 13

    Ember和Rails多态关系

  14. 14

    Typeinfo如何在多态集合中获取类的名称/ ID?

  15. 15

    Typeinfo如何在多态集合中获取类的名称/ ID?

  16. 16

    即使我已经设置了关系,也为多态关系获取未定义的方法

  17. 17

    在MVC 4中获取表标题名称的最佳方法

  18. 18

    如何从Nhibernate元数据获取表依赖关系?

  19. 19

    如何从Nhibernate元数据获取表依赖关系?

  20. 20

    Laravel-雄辩的:与名称空间的多态关系

  21. 21

    Laravel-雄辩的:与名称空间的多态关系

  22. 22

    Rails/ActiveRecord:我可以与具有不同 id 类型的表建立多态关系吗?

  23. 23

    原则2中的多态关系

  24. 24

    SQLAlchemy中的多态所属关系?

  25. 25

    如何在 rails 5 中获取关联的多态对象?

  26. 26

    从表中获取与Eloquent关联的关系

  27. 27

    如何从关系表中获取ID,Laravel

  28. 28

    从3个关系表中获取数据

  29. 29

    在关系mysql表中获取外部ID

热门标签

归档