Ruby on rails ActiveRecord::反射方法-modelname\u id

Ruby on rails ActiveRecord::反射方法-modelname\u id,ruby-on-rails,activerecord,rails-activerecord,Ruby On Rails,Activerecord,Rails Activerecord,我想知道如何从反射中获得复数id方法 我有以下课程 class Tale < ActiveRecord::Base has_many :x has_many :y 要访问关联x和y 我可以用 x.klass #=> x x.class_name #=> "x" x.plural_name #=> "xs" 我需要的是一种从反射中获取方法关联\u name\u id的方法 范例 :x_ids 所以我可以如下使用它 tale_instance_object.se

我想知道如何从反射中获得复数id方法 我有以下课程

class Tale < ActiveRecord::Base
  has_many :x
  has_many :y
要访问关联x和y

我可以用

x.klass #=> x
x.class_name #=> "x"
x.plural_name #=> "xs"
我需要的是一种从反射中获取方法关联\u name\u id的方法

范例

:x_ids
所以我可以如下使用它

tale_instance_object.send(:x_ids)
使用
String#singularize

tale_instance_object.send(x.name.to_s.singularize + "_ids") # => [1, 2, 3, ...]
此外,您还可以使用内置的
#ids_读取器
方法:

my_model_instance.association(:x).ids_reader # => [1, 2, 3, ...]

我想使用ActiveRecord::Reflections模块中的内置方法。。。反射上的like.plural_name为我提供了它的复数名称,用于通过send获取所有关联对象。。model.send(reflection.复数名)是ids\u reader的确切方法名。它不适用于任何模型或反射。I.ids作为方法,但我需要类似于tale_instance_object.send(:x_ids)#=>[1,2,3]的东西,您应该调用关联。不在实例对象本身上。它的工作原理是:
table\u instance\u object.association(:x).ids\u reader
。您的Rails版本是什么?Windows上的Rails-4.2.0 ruby 2.1.5p273您是否知道应该在关联对象上调用该方法,而不是在ActiveRecord实例上?如果您没有再次阅读我的答案,我添加了更清晰的调用该方法的示例。
my_model_instance.association(:x).ids_reader # => [1, 2, 3, ...]