Ruby on rails 视图中已在控制器中操作的输出变量

Ruby on rails 视图中已在控制器中操作的输出变量,ruby-on-rails,ruby,sqlite,Ruby On Rails,Ruby,Sqlite,类别MyClass class MyClass < ActiveRecord::Base attr_accessible :attr0, :attr1 end 看法 在视图中 myclass.modify_attr0 如上所述,@myclasses不是控制器实例变量,而是类本身的实例变量。要在视图中使用@myclasses符号,它需要是一个实例变量: class MyController < ApplicationController def some_method

类别
MyClass

class MyClass < ActiveRecord::Base

  attr_accessible :attr0, :attr1 

end
看法

在视图中

myclass.modify_attr0

如上所述,
@myclasses
不是控制器实例变量,而是类本身的实例变量。要在视图中使用
@myclasses
符号,它需要是一个实例变量:

class MyController < ApplicationController
  def some_method
    @myclasses = MyClass.all
  end
end
class MyController
除此之外,我不是你的粉丝;看起来您要么直接访问属性,要么使用模型方法,要么使用装饰器,甚至是常规助手


在问题编辑为正确后进行编辑

实例变量在渲染前公开;即时创建的新版本在当时不可用。你可以尝试在你的操作中初始化它们并修改它们,但这太恶心了


您在这里以一种非常可怕的方式将关注点混为一谈:不管这种方法需要在装饰器或模型中,等等,在循环中调用控制器来修改每次迭代的实例变量都必须被视为反模式。

是的,我上面的例子非常简单,这不是一个选项,我将编辑我的问题。。谢谢,实际上我想做的是使用
myclass
属性中的数据来操作其他数据并输出结果,这是将实例变量置于控制器错误样式中,还是对其他级别有任何负面影响?我可以很好地使用@myclasses,尽管它在controller@Zois嗯,我没想到那会起作用,;这至少是非常令人困惑/误导的。在混合这两种变量类型时,Rails必须决定优先级(即,如果您有一个实例属性与一个类属性同名怎么办?),因此我认为应该避免这种情况。@Zois您使用的Rails版本是什么?当我设置一个类实例变量时,它不会显示在视图中(正如我所期望的那样)。你确定这真的有效吗?我只是不明白它是怎么回事。我使用的是v3.2.6,我在控制器索引中声明实例变量method@Zois然后你的问题应该反映出,类实例是一个非常不同的东西,你似乎对术语有点困惑。
 <% @myclasses.each do |myclass| %>
   <tr>
     <td><%= myclass.attr0 %></td>
     <td><%= myclass.attr1 %></td>
   </tr>
<% end %>
<% @myclasses.each do |myclass| %>
  <tr>
    <td><%= myclass.attr0 %></td>
    <td><%= myclass.attr1 %></td>
  </tr>
<% end %>
def modify_attr0
    attr0.to_s+" foo"
end
myclass.modify_attr0
class MyController < ApplicationController
  def some_method
    @myclasses = MyClass.all
  end
end