使用respond_to传递多个参数

时间:2011-12-05 08:00:10

标签: ruby-on-rails ruby-on-rails-3.1

如何在rails中使用respond_to传递多个参数?当我有多个实例变量时,我收到一个错误。但我有一个场景,我必须传递多个参数(instance variables)通过respond_to

1 个答案:

答案 0 :(得分:1)

respond_to实际上应该只返回一个单一的东西。 HTML模板渲染器也只返回一件事 - 但是将多个实例变量嵌入到HTML中。

所以你基本上必须对Json和XML做同样的事情:构造一个包含所有数据的对象。

这个代码就是一个例子:

def show
  @post = Post.first
  @users = Users.where(:active => true)
  respond_to do |format|
    format.html #this will simply render the view
    format.json { render :json => { :post => @post, :users => @users } }
  end
end

一旦你想通过Json输出这些多个值,你必须定义一个包含你想要返回的单个Json对象。

在我的示例中,这是一个包含帖子和用户的Json对象 - 从而为调用者提供与HTML视图相同的信息。

结果Json看起来像这样:

{
  post: {..},
  users: [..]
}

更新

如果你使用它来渲染javascript,你有一个script.js.erb,你不必将任何内容传递给responds_to调用,而是可以在你的js.erb中使用所有实例变量(前缀为@)像在普通HTML视图中一样使用<%=%>语法。