繁体   English   中英

Rails:JavaScript中的Ruby代码

[英]Rails: ruby code in javascript

我在javascript script标记中传递红宝石代码时遇到问题

现在我有这段代码:

<script>
  var offer_foto = {
    slide_offer_preview_1: ['one.jpg', 'two.jpg', 'three.jpg'],
    slide_offer_preview_2: ['four.jpg', 'five.jpg', 'six.jpg']
  }
</script>

我的Ruby代码

<% for i in 0..@page[:proposals].count - 1 %>
  <%= @page[:proposals][i][:hotels][0]['hotel_images'].map{|f| f['url']} %>
<% end %>

在JavaScript中我需要

slide_offer_preview_i: <%= @page[:proposals][i][:hotels][0]['hotel_images'].map{|f| f['url']} %>

不幸的是,我不知道如何获得它,因为我不太了解Javascript。 如果您需要更多信息,请发表评论。 谢谢!

您应该在控制器中而不是模板中执行此操作。 使逻辑远离模板。

在您的控制器中:

@slide_offer_previews = []
for i in 0..@page[:proposals].count - 1
  @slide_offer_previews << @page[:proposals][i][:hotels][0]['hotel_images'].map{|f| f['url']}
end

然后在您看来:

slide_offer_preview_i: <%= @slide_offer_previews[i] %>

或者,如果@page[:proposals][i]是一个对象,则向您的类添加一个方法:

def hotel_image_urls
  self[:hotels][0]['hotel_images'].map{|f| f['url']}
end

然后在您看来:

slide_offer_preview_i: <%= @page[:proposals][i].hotel_image_urls() %>

编辑 :对不起,这甚至没有语法意义。 忽略此备用项。

我和Joe Frembach在一起,您应该在控制器中执行此操作。 但是,如果确实需要将Ruby嵌入到Javascript中,则可以通过在文件扩展名中添加.erb(file_name.js.erb)来实现,在这种情况下,您可以执行以下操作:

alert('<%= @your_embedded_variable %>');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM