快速提问:我想在我的模型中delegate
一组关联方法:
z13u_methods = [
:isbn_cleaned,
:oclc_cleaned,
:contents_cleaned,
:summary_cleaned,
:title_statement,
:is_serial?
]
delegate *z13u_methods, :to => :z13u, :prefix => true, :allow_nil => true
当我在Ruby 1.9.3上运行Rails 3.2.13时,这很好用。但是,当我在Ruby 1.8.7上运行Rails 3.2.13(相同版本)时,遇到以下错误:
syntax error, unexpected tSYMBEG, expecting tAMPER
delegate *z13u_methods, :to => :z13u, :prefix => true, ...
突出显示:to
。
我想在Ruby 1.8中,splatted数组必须是最终参数(块名称除外)。是否有其他方法可以为这种情况绘制数组?
答案 0 :(得分:2)
如果您只使用z13u_methods
进行delegate
来电,那么您可以这样做:
delegate_args = [
:isbn_cleaned,
:oclc_cleaned,
:contents_cleaned,
:summary_cleaned,
:title_statement,
:is_serial?,
{ :to => :z13u, :prefix => true, :allow_nil => true }
]
delegate *delegate_args
我认为这是你需要的基本模式。当然还有其他方法可以实现:
delegate *(z13u_methods + [{ :to => :z13u, :prefix => true, :allow_nil => true }])
# If you don't mind changing z13u_methods
delegate *z13u_methods.push(:to => :z13u, :prefix => true, :allow_nil => true)
# If you don't want to change z13u_methods
delegate *z13u_methods.dup.push(:to => :z13u, :prefix => true, :allow_nil => true)
# ---------------------^^^
这个主题可能有更多变化,这些只是想到的两个选项。
就使用1.8.7而言,尽快升级,我认为1.8.7甚至不再支持。