gpt4 book ai didi

ruby-on-rails - ruby /rails : difference between "@item" and "item" in a view

转载 作者:数据小太阳 更新时间:2023-10-29 07:54:26 25 4
gpt4 key购买 nike

我有一个 View 可以从 Controller 呈现或作为另一个 View 的一部分呈现。

在我读过的所有代码中, Controller 分配一个实例变量“@item”,然后调用 View 。另一方面,当将其渲染为局部时,它会接收一个参数“item”。

所以,我所有的观点都是这样开始的:

item ||= @item

非常不干。有没有更好的方法我想念?

最佳答案

@item 是一个实例变量——它对整个类实例可见。出于 Rails View 的目的,您可以将它们视为“全局”变量。例如,如果您有:

class Foo
def initialize
@bar = "Yay!"
end

def show_bar
puts @bar
end
end

然后调用 Foo.new.show_bar 将打印 Yay!,因为 @bar 变量对整个实例可见。

item 另一方面是局部变量。它仅在定义它的范围内可见。Rails 使用实例变量在 Controller 方法和 View 之间共享数据。

通常,partials 接收局部变量,因为它们不像标准 View 那样假定与 Controller 方法是 1:1 的关系。也就是说,设计良好的部分不假定存在任何实例(“全局”)变量。假设一个完整的 View 将由 Controller 方法设置的数据呈现;假定部分是由显式传递给它们的数据呈现的。

由于您同时使用此 View ,我建议您将其重构为“只是部分 View ,女士”部分和完整 View 包装部分。因此,您的完整 View 可能很简单:

<%=render :partial => "item_partial", :locals => {:item => @item} %>

然后,您的 item_partial 将始终使用 item 而不是 @item

这使您能够轻松打包所有可重复使用的内容,然后根据需要为完整 View 添加额外的“绒毛”。

关于ruby-on-rails - ruby /rails : difference between "@item" and "item" in a view,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3478781/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com