Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/54.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
如何在视图中将变量从控制器传递到javascript?_Javascript_Ruby On Rails_Ruby_Ruby On Rails 3_Partial Views - Fatal编程技术网

如何在视图中将变量从控制器传递到javascript?

如何在视图中将变量从控制器传递到javascript?,javascript,ruby-on-rails,ruby,ruby-on-rails-3,partial-views,Javascript,Ruby On Rails,Ruby,Ruby On Rails 3,Partial Views,我有一个数组@fields,它有文本和一个id,asset\u id。 为了在渲染中将局部变量从控制器传递到视图,我们使用 render(:template => "assets/invalid", :locals => {:asset_id => params[:id], :fields => @fields}) 观点是 <div id="panel"> <script> alert('Invalid values for ')

我有一个数组@fields,它有文本和一个id,asset\u id。 为了在渲染中将局部变量从控制器传递到视图,我们使用

render(:template => "assets/invalid", :locals => {:asset_id => params[:id], :fields => @fields})
观点是

<div id="panel">
  <script>
    alert('Invalid values for ')
    window.location = "../assets/" 
  </script>
</div>

警报('的值无效)
window.location=“../assets/”
这将生成一个弹出框。但是,我希望弹出框重定向到“./assets/assets\u id”,并显示“+字段的无效值”

下面的方法不起作用

<div id="panel">
  <script>
    var fields = fields
    var asset_id = asset_id 
    alert('Invalid values for ' + fields )
    window.location = "../assets/" + asset_id 
  </script>
</div>

变量字段=字段
var asset\u id=资产\u id
警报(“+字段的值无效)
window.location=“../assets/”+资产id

能这么简单吗

<div id="panel">
  <script>
    var fields = <%= fields.to_json %>
    var asset_id = <%= asset_id.to_json %>
    alert('Invalid values for ' + fields )
    window.location = "../assets/" + asset_id 
  </script>
</div>

变量字段=
var资产\u id=
警报(“+字段的值无效)
window.location=“../assets/”+资产id

更新顺便问一下,为什么需要将
字段
参数
作为局部变量传递,为什么不在您的视图中使用
@fields

可以这么简单吗

<div id="panel">
  <script>
    var fields = <%= fields.to_json %>
    var asset_id = <%= asset_id.to_json %>
    alert('Invalid values for ' + fields )
    window.location = "../assets/" + asset_id 
  </script>
</div>

变量字段=
var资产\u id=
警报(“+字段的值无效)
window.location=“../assets/”+资产id
更新顺便问一下,为什么需要将
字段
参数作为局部变量传递,为什么不在视图中使用
@fields

<div id="panel">
  <script>
    var fields = fields
    var asset_id = <%= asset_id %> 
    alert('Invalid values for ' + fields )
    window.location = "../assets/" + asset_id 
  </script>
</div>

变量字段=字段
var资产\u id=
警报(“+字段的值无效)
window.location=“../assets/”+资产id
现在,您可以将数据传递到html以获得高级功能,您可以使用类似于gon的功能查看gon gem,这可能会有所帮助这有什么问题吗

<div id="panel">
  <script>
    var fields = fields
    var asset_id = <%= asset_id %> 
    alert('Invalid values for ' + fields )
    window.location = "../assets/" + asset_id 
  </script>
</div>

变量字段=字段
var资产\u id=
警报(“+字段的值无效)
window.location=“../assets/”+资产id


现在,您可以将数据传递到html以获取advance thing,您可以使用类似于gon的东西查看gon gem,这可能会有所帮助我在一些应用程序中使用过一种方法,在这些应用程序中,客户端代码需要使用服务器数据,即构建一个哈希并将其呈现为页面上的json文本,并让我的所有JS引用该对象。这与上面提到的方法相同,但更简洁,因为您不必在JS代码中混合很多服务器标记。更易于阅读和维护。

我在一些应用程序中使用过一种方法,在这些应用程序中,客户端代码需要使用服务器数据,即构建一个散列并将其呈现为页面上的json文本,并让我的所有JS引用该对象。这与上面提到的方法相同,但更简洁,因为您不必在JS代码中混合很多服务器标记。更易于阅读和维护。

当您使用rake routes时,是否看到/assets/:id?是的,我看到了。alertbox重定向到../assets/。我希望它重定向到../assets/asset\u id。张贴您如何获取asset\u id以及如何发送它。因为它是html.erb,所以您可以直接获取它。资产id来自控制器。我想将其发送到视图中的脚本以创建该资产的位置,即重定向到该ID页。渲染中的:local应该将其发送到视图,不是吗?JS必须为window.location创建重定向到的链接。当您执行rake路由时,是否看到/assets/:id?是的,我看到了。alertbox重定向到../assets/。我希望它重定向到../assets/asset\u id。张贴您如何获取asset\u id以及如何发送它。因为它是html.erb,所以您可以直接获取它。资产id来自控制器。我想将其发送到视图中的脚本以创建该资产的位置,即重定向到该ID页。渲染中的:local应该将其发送到视图,不是吗?JS必须为window.location创建重定向到的链接。数组的
to_s
不能在Ruby版本中一致地解析为JS。虽然数组的
inspect
输出主要是json,但是使用
to_json
@Phrogz点更安全,这是非常好的预期。数组的
to_s
在Ruby版本中不能作为JS一致地解析。虽然数组的
inspect
输出大部分是空的,但是使用
to_json
@Phrogz点更安全。to_json方法不起作用。视图(警报框)未显示。如果我像@Viren所说的那样将其保留为字段,则警告框会显示“未定义的值无效”。请检查页面源代码——它被转换为字段的是字符串数组,而asset_id是字符串。to_json方法不起作用。视图(警报框)未显示。如果我像@Viren所说的那样将其保留为字段,则警告框会显示“未定义的值无效”。请检查页面源——它转换为字段的是字符串数组,而资产id是字符串