Ruby on rails Rails 3.2.13(Ruby 1.8.7)中使用splat令牌和委托的替代方案

Ruby on rails Rails 3.2.13(Ruby 1.8.7)中使用splat令牌和委托的替代方案,ruby-on-rails,ruby,ruby-1.8.7,Ruby On Rails,Ruby,Ruby 1.8.7,快速提问:我想将一组方法委托给模型中的关联: 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

快速提问:我想
将一组方法委托给模型中的关联:

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中,飞溅的数组必须是最终参数(块名除外)。在这种情况下,是否有其他方法可以显示数组?

如果您仅对该
委托调用使用
z13u\u方法
,则可以执行以下操作:

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甚至不再受支持。

谢谢,@mu。我会想出类似的方法:
z13u\u delegate\u options={:to=>:z13u,:prefix=>true,:allow\u nil=>true};代表*(z13u_方法<代码>