Ruby on rails 向Rails中的实例变量添加参数

Ruby on rails 向Rails中的实例变量添加参数,ruby-on-rails,ruby-on-rails-3,Ruby On Rails,Ruby On Rails 3,我正在创建一个传递给视图的实例变量。这个变量“post”有一个与之关联的用户id,我想添加一个名为“username”的额外属性,这样我也可以传递该属性并在视图中使用它 下面是我想做的一个例子 @post = Post.find(params[:id]) @post.username = User.find(@post.user_id).username “我的用户”模型中存在用户名列,但“我的歌曲”模型中不存在用户名列。所以它不让我使用 @post.username 我知道我可以创建一个全

我正在创建一个传递给视图的实例变量。这个变量“post”有一个与之关联的用户id,我想添加一个名为“username”的额外属性,这样我也可以传递该属性并在视图中使用它

下面是我想做的一个例子

@post = Post.find(params[:id])
@post.username = User.find(@post.user_id).username
“我的用户”模型中存在用户名列,但“我的歌曲”模型中不存在用户名列。所以它不让我使用

@post.username
我知道我可以创建一个全新的实例变量,并将这些信息放在其中,但我希望在一个变量中保持一切良好和整洁。这也将使我的json呈现代码看起来更干净

关于我如何做到这一点有什么想法吗


谢谢

根据您的
Post
模型中存在的
user\u id
,您可能已经建立了可以检索用户名的关联。简单使用现有关联可能会省去很多麻烦:

@post = Post.find(params[:id])
username = @post.user.username
如果您可能一次查询多篇文章(例如,在索引页上,调用
.includes
通知Rails立即加载关联将帮助您避免:

最后,要在JSON输出中包含相关记录,请在序列化时传递
:include
参数:

# in controller
render :json => @post.to_json(:include => :user)

包括对序列化选项的更全面的讨论。非常值得一读。

基于您的
Post
模型中存在
用户id
,您可能已经设置了可以检索用户名的关联。简单使用现有关联可能会省去很多麻烦:

@post = Post.find(params[:id])
username = @post.user.username
如果您可能一次查询多篇文章(例如,在索引页上,调用
.includes
通知Rails立即加载关联将帮助您避免:

最后,要在JSON输出中包含相关记录,请在序列化时传递
:include
参数:

# in controller
render :json => @post.to_json(:include => :user)

包括对序列化选项的更全面的讨论。非常值得一读。

无需传递单独的实例变量。 1.您可以在视图本身中使用
@post.user.username
。 2.或者您可以创建一个助手并传递
@post.user

def username user
 user.username
end

不需要传递单独的实例变量。 1.您可以在视图本身中使用
@post.user.username
。 2.或者您可以创建一个助手并传递
@post.user

def username user
 user.username
end

谢谢,我不知道这种关联。是否有必要将用户名信息添加到页面的json输出中?这是一个单独的问题,您如何将其呈现为json?如果您使用默认值,则将选项传递到to_json调用中。例如render:json=>@post.to_json(:include=>:user)。或者,如果你想让Post JSON对象在你的应用程序中到处都有用户名,那么在Post模型中自定义
as_JSON
方法。非常感谢!这正是我所需要的。我在视图中使用@Post.user.username关联,并添加了JSON代码,以在我的控制器中获取用户。再次感谢您的快速回复。谢谢s、 我不知道这种关联。是否要将用户名信息添加到页面的json输出中?这是一个单独的问题,如何将其呈现为json?如果使用默认值,则将选项传递到to_json调用中。例如render:json=>@post.to_json(:include=>:user)。或者,如果你想让Post JSON对象在你的应用程序中到处都有用户名,那么在Post模型中自定义
as_JSON
方法。非常感谢!这正是我所需要的。我在视图中使用@Post.user.username关联,并添加了JSON代码以在我的控制器中获取用户。再次感谢您的快速回复。Ya@post.user.username工作正常。但是我的json输出仍然有user_id=#是否还有其他方法可以将用户名添加到页面的json输出中?您需要在将json呈现为@post.to_json(:include=>:user)时添加user感谢asitmoharna,此解决方案有效。感谢快速回复a@post.user.username,效果很好。但是我的json输出仍然有user_id=#是否还有其他方法可以将用户名添加到页面的json输出中?您需要在将json呈现为@post.to_json(:include=>:user)时添加用户感谢asitmoharna此解决方案有效。感谢您的快速回复