返回要查看的对象数组

时间:2016-04-28 04:56:44

标签: ruby-on-rails ruby

我不确定下面的一个简单示例我做错了什么。

我只是想创建一个MyImage对象列表,填写名称,返回视图并显示所有这些对象。

我的对象

class MyImage
   def initialize(name)
      @name = name
    end
    def name= name
      @name = name
    end
end

我的控制器

class WelcomeController < ApplicationController
   def index
      @arr ||= Array.new
      @arr.push(MyImage.new('Image1'))
      @arr.push(MyImage.new('Image2'))
   end
end

我的观点

<ul>
   <% @arr.each do |t| %>
      <li><%= t.name %></li>
   <% end %>
</ul>

我得到的错误是

undefined method `name' for #<MyImage:0x86fca90 @name="Image1">

只是想创建一个对象数组并在视图中显示它们,并且能够访问我的集合中我的对象的属性。

这是我的第一次红宝石尝试,所以如果我做的事情完全不对,请同时指出。

2 个答案:

答案 0 :(得分:2)

您已为name定义了一个setter,但没有为getter定义。

您可以通过将此行添加到类定义中来解决此问题:

attr_reader :name

更好的是,完全删除显式的setter定义,将其替换为attr_accessor的调用:

class MyImage

  attr_accessor :name

  def initialize(name)
    @name = name
  end
end

您可以使用Struct进一步简化此操作来创建类:

MyImage = Struct.new(:name)

答案 1 :(得分:0)

一种简单的方法,为名称添加getter

def name
  @name
end

您也可以使用attr_acessor代替撰写def name=def name