0

我正在开发一个 API 控制器。自然,在将响应发送给客户端之前,我会进行一些数据“梳理”。为此,我有一些专门的私有方法。我希望能够在控制器中设置一个名为“resp”的实例变量(因为“响应”似乎是一个保留的 Rails 术语)并让这些方法直接修改响应而不是来回传递它。所以我声明

attr_accessor :resp

并将其设置在这样的端点之一

resp = movie.hash_attributes_for_movie_details(current_user)

这会导致错误,因为 resp 没有以这种方式设置并最终为零。如果我直接设置实例变量

@resp = movie.hash_attributes_for_movie_details(current_user)

我能够“得到”它,但二传手没有设置任何东西。我错过了什么?

提前致谢。

4

1 回答 1

2

在同一对象上使用 setter 时,Ruby 有一个陷阱:您必须使用语法self.setter = value. 否则,ruby 认为您正在创建一个局部变量。

因此,根据您的情况,您需要将代码更改为:

self.resp = movie.hash_attributes_for_movie_details(current_user)

是的,这有点烦人,但我们必须付出代价才能使局部变量的语法和方法相同。

于 2013-11-09T04:21:50.267 回答