如何在RubyonRails中使用字符串访问实例关系



Supose我有一个名为Classroom的类,还有一个名叫Student的类。根据他们的关系,我可以使用返回学生数组的Classroom.students访问Student。

现在,考虑到这一点,如果我将'Classroom'分配给一个变量并用variable.constantize调用它,它将返回我可以正常查询的Class。

例如:

[1] pry(main)> variable = 'Classroom'
[2] pry(main)> variable.constantize.students
=> [#<Student id: 1, name: 'Foo Smith'>, <Student id: 2, name: 'Bar Obama'>]

所有这些对我来说都有效,但如果密钥名称也存储为字符串,我不知道如何访问学生。如果我试图访问Classroom字段,这是有效的,但对于关系来说,这似乎是不可能的。

例如:

[1] pry(main)> variable = 'Classroom'
[2] pry(main)> class_key = 'name'
[3] pry(main)> relation_key = 'students'
[4] pry(main)> variable.constantize.first[class_key]
=> "Happy Classroom"
[5] pry(main)> variable.constantize.first[key]
=> nil

还有另一种情况,字符串是类中的一个方法。

我想做的(模拟代码(

[1] pry(main)> variable = 'Classroom'
[2] pry(main)> method = 'last'
[3] pry(main)> variable.constantize[method]
=> <#Classroom id: 3, name: 'Dubious Classroom'>

其中任何一个在Ruby中都可行?谢谢

使用Object.public_send,如下所示:

'Classroom'.constantize.public_send('students').public_send('first')

编辑:原始答案建议使用send而不是public_send。不同的是,前者甚至会调用私有方法,因此使用起来不如后者安全。

最新更新