基于ActiveRecord中的几个字段,我需要进行一系列计算,这将导致显示一个表(在视图中),大约有10列和15行。
我不想在视图中做这些计算,所以我考虑创建一个2D数组来存储模型中的行,然后在视图中访问这个数组来构建一个表来显示。然而,似乎我不能存储在一个模型的实例变量数组,所以我寻找关于如何最好地处理这种情况的建议?
如果有一种方法传递数组从模型到视图,这将解决我的问题。尝试过这样的东西,但没有工作,由于attr_accessor不处理数组?
xxx模型
attr_accessor :row_hash
after_initialize do
makeTable
end
def makeTable
row_hash = Array.new
for i in 1..15 do
row_hash.push(i)
end
end
视图<% @xxx.row_hash.each do |r| %>
<%= r %>
<% end %>
row_hash填充ok在模型中,但我得到'no method defined each'在视图
我想你可以把self
加到row_hash
attr_accessor :row_hash
after_initialize do
makeTable
end
def makeTable
self.row_hash = Array.new
for i in 1..15 do
self.row_hash.push(i)
end
end
初始化row_hash = Array.new
将创建一个名为row_hash
的局部变量,因此您需要调用self.row_hash=
才能访问实例属性写入器。
但是,在模型中这样做仍然有点奇怪,所以可能有更好的方法来处理这个问题。
我只写:
attr_accessor :rows_array
after_initialize { generate_row_arrays }
def generate_row_arrays
self.rows_array = (1..15).to_a
end
您可能注意到我将名称从rows_hash
更改为rows_array
以避免混淆。我使用带下划线的名称来遵循Ruby约定。