我不确定下面的一个简单示例我做错了什么。
我只是想创建一个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">
只是想创建一个对象数组并在视图中显示它们,并且能够访问我的集合中我的对象的属性。
这是我的第一次红宝石尝试,所以如果我做的事情完全不对,请同时指出。
答案 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