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("."))}

出典:キーパス ドキュメント

于 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 に答える