从Rails中的方法返回多个结构

时间:2014-06-26 23:13:57

标签: ruby-on-rails

所以我一直在尝试访问已经传递给方法之外的变量的结构;但是,我一直收到这个错误:undefined method 'product_1'

以下是代码:

@page = get_fake_page
puts @page.product_1

然后在get_fake_page我有这个:

Product = Struct.new(:slug, :id, :hover_category, :name, :editors_pick, :width, :height, :image, :image_1, :image_name_selection, :url_link)
def get_fake_landing_page
 product_1 = Product.new('#', '', '', '', false, '300', '300', '', '', '', '')
 product_2 = Product.new('#', '', '', '', false, '300', '300', '', '', '', '')
end

我应该如何从方法传递结构,以便我可以在get_fake_page之外访问它们?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以从get_fake_landing_page方法返回哈希:

def get_fake_landing_page
  product_1 = Product.new('#', '', '', '', false, '300', '300', '', '', '', '')
  product_2 = Product.new('#', '', '', '', false, '300', '300', '', '', '', '')

  {product_1: product_1, product_2: product_2}
end

然后像这样使用它:

@page = get_fake_landing_page
puts @page[:product_1]

返回Struct而不是Hash:

def get_fake_landing_page
  product_1 = Product.new('#', '', '', '', false, '300', '300', '', '', '', '')
  product_2 = Product.new('#', '', '', '', false, '300', '300', '', '', '', '')

  Result = Struct.new :product_1, :product_2
  Result.new product_1, product_2
end

或者更好的是,OpenStruct:

require 'ostruct'    

def get_fake_landing_page
  product_1 = Product.new('#', '', '', '', false, '300', '300', '', '', '', '')
  product_2 = Product.new('#', '', '', '', false, '300', '300', '', '', '', '')

  OpenStruct.new product_1: product_1, product_2: product_2
end

然后像这样使用它:

@page = get_fake_landing_page
puts @page.product_1