首页 > 解决方案 > 使用 json 参数渲染模板

问题描述

我有这样newcreate行为:

def new
 @foo = Foo.new
end

def create
  @foo = Foo.new(foo_params)
  respond_to do |format|
     if @foo.save
       format.html { redirect_to root_path }      
     else
       format.html { render :new } //**this line I want to send params**
     end
  end
end

我有一个 jbuilder 文件来执行这样的新操作:

new.json.jbuilder

json.foo do
  json.a "Some important info"
  json.b "Some important info"
end

在 create 的验证失败后,rails 无法读取此文件。如何渲染视图模板(如render :new)并在此视图中发送一些 json 数据?

我有一个这样的js调用:

var json_url = window.location.href + ".json";

var foo;

$.ajax({
  url: json_url,
  dataType: 'json',
  async: false,
  success: function(data) {
    foo = data.foo;
  }
});

标签: ruby-on-rails

解决方案


如果您希望 Rails 呈现文件,则需要删除对的调用,redirect_to因为它会有效地阻止任何呈现。此外,如果您不希望控制器响应不同的格式,最好也跳过对 的调用respond_to

如果您只是调用render action: :new,视图模板将可以访问所有控制器实例变量(如@foo):

json.foo do
  json.a @foo.a
  json.b @foo.b
end

推荐阅读