2

这是我真正想做的事情:

Outage.joins{eval "unit.plant"}

我将有一个代表squeel keypath的字符串。我想将此字符串发送到连接语句中。

但这是我得到的错误:

#<Class:0x639e328>: unknown class: Squeel::Nodes::Function

我试过了:

Outage.joins{"unit.plant"}

但这不起作用......我错过了什么?

我在 github 页面上没有看到任何关于此的文档:https ://github.com/ernie/squeel/

感谢您的任何帮助!


更新: 我发现了一种非常令人困惑的方法来解决这个问题:

("unit.plant".split ".").map{ |x| x.to_sym }.reverse.inject{ |acc, x| { x => acc } }

这将输出:

{:unit=>:plant}

这可以传递给joins squeel函数。我确信必须有比构造嵌套符号更好的方法:(

4

2 回答 2

2

怎么样

Outage.joins{Squeel::Nodes::KeyPath.new("unit.plant".split("."))}

来源:KeyPath 文档

于 2012-07-25T03:06:43.483 回答
1

替代解决方案,它可以与外部/内部链接:

strs = "unit.plant"
Outage.joins{strs.split(".").inject((strs.present? ? self : nil), :__send__)}

# chain with inner
# Outage.joins{strs.split(".").inject((strs.present? ? self : nil), :__send__).inner}
于 2012-08-07T17:10:35.460 回答