我对Rails还是很陌生,我想了解为什么Rails选择实例变量的一个版本而不是另一个版本。
在控制器中,我定义了实例变量。
def show
@discussions = Discussion.all.order('created_at desc')
end
def new
@discussion = current_user.discussions.build
end
如果我要在其中一个视图中调用@discussion,它将选择哪个版本的变量?
答案 0 :(得分:0)
控制器中的每个动作(show
和new
)对应于相同名称并呈现视图。因此,控制器中的show
方法将呈现app/views/controller_name/show.html.erb
,除非您通过显式调用render
来另行声明。
show.html.erb
可用的唯一实例变量是控制器的show
操作中定义的实例变量。其他动作也一样。
答案 1 :(得分:0)
我对Rails也还是陌生的,但让我努力。我认为在两种情况下,@discussion都是同一件事,它被分配给它。因此,在代码段中,如果您对/ controller_route / new进行GET调用,它将准确显示您的意图-geom_vline
。
如果您对data.frame
进行GET调用,因为您尚未定义它,所以它将为current_user.discussions.build
。 /controller_route
与评估无关。
但这又是我的猜测;很高兴对此进行教育/纠正。