动态获取rails关联

Sea*_*ean 5 ruby-on-rails associations active-relation

如果我有一个关联名称作为字符串,有没有办法可以获得关联对象的句柄?

例如:

o = Order.first
Run Code Online (Sandbox Code Playgroud)

o.customer会给我这个订单所属的客户对象.

如果我有:

o = Order.first
relationship = 'customer'
Run Code Online (Sandbox Code Playgroud)

我想做的事情如下:

customer = eval("o.#{relationship}")
Run Code Online (Sandbox Code Playgroud)

我知道eval是一个可怕的选择,我应该避免它.执行此操作的最佳方法是什么(因为eval在此示例中不起作用).

我确实有这个工作:

customer = o.association(relationship)
Run Code Online (Sandbox Code Playgroud)

我后来发现该关联不是公共API的一部分,不应该使用.因为当我拿出一行代码时,我关闭了页面(引用了那个关系),它停止了工作.

任何想法都会很棒!

mar*_*rio 17

这样做怎么样?

customer = o.send(relationship)
Run Code Online (Sandbox Code Playgroud)

  • 不需要调用#to_sym; send可以处理字符串. (3认同)

lul*_*ala 6

对于那些害怕使用的人send

o.association(relationship).scope
Run Code Online (Sandbox Code Playgroud)