为什么rails在生成的代码中使用@poop对象实例变量而不只是本地poop变量?是否有一些可以预见的常见情况,在这里它是有用的,而不是简单地使用一个局部变量?我认为使用局部变量并不对对象名称空间附加内容是有意义的,除非您需要它。
# GET /poop/1
# GET /poop/1.xml
def show
@poop = Poop.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @poop }
end
end
最佳答案
是否有一些可以预见的常见情况,在这里它是有用的,而不是简单地使用一个局部变量?
当然有。默认情况是这样的。检查script/generate/scaffold
中自动生成(使用app/views/poops/show.html.erb
视图)的源代码:
<p>
<b>Field:</b>
<%=h @poop.field %>
</p>
<%= link_to 'Edit', edit_poop_path(@poop) %>
如果变量是controller方法的本地变量,那么渲染器如何访问使用
find(params[:id])
找到的元素?respond_to
不会直接调用呈现页面的组件。相反,它会将执行延迟到局部变量已经超出范围的程度。然后,渲染器可以与控制器中计算的内容通信的唯一方法是使用实例变量。