Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails:在一个动作中同时呈现json和布局_Ruby On Rails_Ruby_Json - Fatal编程技术网

Ruby on rails RubyonRails:在一个动作中同时呈现json和布局

Ruby on rails RubyonRails:在一个动作中同时呈现json和布局,ruby-on-rails,ruby,json,Ruby On Rails,Ruby,Json,我有一个动作看起来像这样 def asset_map_fullscreen @config_items = @config_item.ci_relationships.find(:all, include: [:secondary, :relationship]) @config_items_associated = @config_item.reverse_ci_relationships.find(:all, include: [:primary, :relation

我有一个动作看起来像这样

def asset_map_fullscreen
      @config_items = @config_item.ci_relationships.find(:all, include: [:secondary, :relationship])
      @config_items_associated = @config_item.reverse_ci_relationships.find(:all, include: [:primary, :relationship])

      @next_level = process_relationship
      render :json => @next_level :layout=>false
  end
我的目的是返回一个json数据,并希望执行
:layout=>false
。有没有一种方法可以通过一次行动来实现这一点

当我单独给出
render:json=>@next_level
时,它只是在我的页面中呈现json数据,其他什么都没有

我还有一个
asset\u map\u fullscreen.html.erb
文件。我想在发送json响应的同时呈现这个文件(我需要json数据来执行一些操作)

还是简单

render json: @next_level
希望这对你有用

还是简单

render json: @next_level

如果您只需要呈现json,那么希望这样做对您有用

render :json => @next_level
如果你想呈现一些html文件,可以这样做

render partial: 'asset_map_fullscreen'
你想把两者都渲染出来。这是不可能的。可能的解决办法是

render partial: 'asset_map_fullscreen', data: @next_level
有了它,您可以部分访问变量。你应该部分地做必要的计算

还有一种可能性,您可以使用操作名创建js文件,并在该文件中执行检查。关于这一点,请看@7urkm3n答案


最后一个解决方案是将它们保存在部分的某个隐藏字段中,然后用javascript从html中提取出来

如果您只需要呈现json,那么可以这样做

render :json => @next_level
如果你想呈现一些html文件,可以这样做

render partial: 'asset_map_fullscreen'
你想把两者都渲染出来。这是不可能的。可能的解决办法是

render partial: 'asset_map_fullscreen', data: @next_level
有了它,您可以部分访问变量。你应该部分地做必要的计算

还有一种可能性,您可以使用操作名创建js文件,并在该文件中执行检查。关于这一点,请看@7urkm3n答案


最后一个解决方案是将它们保存在部分的某个隐藏字段中,然后用javascript从html中提取出来

渲染中缺少逗号。大多数情况下,如果呈现JSON,则不需要
布局
,最好只使用HTML

已更新

当像这样调用时,您得到的是对象,您只需稍后将其附加到您想要的页面中

JS文件:

创建
asset\u map\u fullscreen.js.erb
文件,在页面中添加此文件

console.log('yeah worked to test only');
console.log(<%= j render @next_level %>);
现在,您需要将
remote:true
添加到您的按钮或表单中,无论是什么


如果您发布它,我可以帮助您。

您在渲染中缺少逗号。大多数情况下,如果呈现JSON,则不需要
布局
,最好只使用HTML

已更新

当像这样调用时,您得到的是对象,您只需稍后将其附加到您想要的页面中

JS文件:

创建
asset\u map\u fullscreen.js.erb
文件,在页面中添加此文件

console.log('yeah worked to test only');
console.log(<%= j render @next_level %>);
现在,您需要将
remote:true
添加到您的按钮或表单中,无论是什么


如果你发布它,我可以帮你。

简单:
render:json=>@next\u-level
works

简单:
render:json=>@next\u-level
works

不确定我是否理解正确,但如果你想呈现
资产映射全屏.html.erb
模板,但也需要该页面中的json(出于某些原因,比如操纵数据或其他原因)您可以只呈现模板并将json作为实例变量传递给视图文件:

def asset_map_fullscreen
  @config_items = @config_item.ci_relationships.find(:all, include: [:secondary, :relationship])
  @config_items_associated = @config_item.reverse_ci_relationships.find(:all, include: [:primary, :relationship])

  @next_level = process_relationship
  @next_level_json = process_relationship.to_json
  render :asset_map_fullscreen
end
然后在查看代码中,您可以引用
@next\u level\u json
,这样您就可以将
@next\u level
作为常规对象。但不确定
处理关系
来自何处(控制器上的方法?)


请务必理解,您只能返回到浏览器中一种类型的
内容类型
,可以是json、html、xml、二进制等,但每次只能返回一种内容。如果您需要显示html页面并将其呈现给浏览器,然后传递json,则只需将模板呈现为html(如上所述)并将json数据保存在实例变量中以在视图中使用。您不能在同一个响应中返回html和json(如在xhr/ajax请求中)。

不确定我是否理解正确,但如果要呈现
资产映射\u fullscreen.html.erb
模板,但也需要该页面中的json(出于某些原因,比如操纵数据或其他原因)您可以只呈现模板并将json作为实例变量传递给视图文件:

def asset_map_fullscreen
  @config_items = @config_item.ci_relationships.find(:all, include: [:secondary, :relationship])
  @config_items_associated = @config_item.reverse_ci_relationships.find(:all, include: [:primary, :relationship])

  @next_level = process_relationship
  @next_level_json = process_relationship.to_json
  render :asset_map_fullscreen
end
然后在查看代码中,您可以引用
@next\u level\u json
,这样您就可以将
@next\u level
作为常规对象。但不确定
处理关系
来自何处(控制器上的方法?)

请务必理解,您只能返回到浏览器中一种类型的
内容类型
,可以是json、html、xml、二进制等,但每次只能返回一种内容。如果您需要显示html页面并将其呈现给浏览器,然后传递json,则只需将模板呈现为html(如上所述)并将json数据保存在实例变量中,以便在视图中使用。您不能在同一个响应中返回html和json(就像在xhr/ajax请求中一样)

我想在发送json响应的同时呈现这个文件(我需要json数据来执行一些操作)

TL;DR:由于http协议规范,这是不可能的。一个人应该执行两个单独的请求

完成任务的最简单方法是呈现
html
(通过
erb
或其他方式),然后从呈现的页面使用javascript/AJAX调用另一个控制器操作(例如,
asset\u map\u fullscreen\u json
)(同时仍然分离主请求和后续AJAX调用):

我想在发送json响应的同时呈现这个文件(我需要json数据来执行一些操作)

TL;DR:由于http协议规范,这是不可能的。一个人应该执行两个单独的请求