所以我一直在尝试访问已经传递给方法之外的变量的结构;但是,我一直收到这个错误: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
之外访问它们?
谢谢!
答案 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