如何在Rails 3.2的字符串中呈现js.erb文件?

时间:2014-11-03 18:00:15

标签: jquery ruby-on-rails ruby-on-rails-3 erb

以下是Rails 3.2 app的代码new.js.erb文件:

<% if params[:order][:field_changed] == 'quote_id' && @digi_keys.present? %>
  <% @quote_ids.each_with_index do |v, i| %>
    <% quote = PurchaseOrderx.quote_class.find_by_id(v)%>
    <% if quote %>
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_product_name').val("<%=quote.product_name%>");
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_product_spec').val('<%=quote.product_spec%>');
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_unit_price').val('<%=quote.unit_price%>');
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_unit').val('<%=quote.unit%>');      
    <% else %>
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_product_name').val('');
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_product_spec').val('');
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_unit_price').val('');
      $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_unit').val('');
    <% end %> 
    $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_qty').val('');
    $('#order_order_items_attributes_' + <%=@digi_keys[i]%> + '_item_note').val(''); 
    $('#order_po_total').val('');  
  <% end %>
  $('#order_field_changed').val('');
<% end %>

我们要做的是将上面的代码保存到js_erb_code字符串中并进行渲染。由于js_erb_code将jquery / javascript和erb代码混合在一起,我们不确定在new.js.erb中应该使用哪个渲染选项?

<% render inline: js_erb_code %>

<% render js: js_erb_code %>

或者这种编码实践存在问题。

有人可以对此有所了解吗?非常感谢。

1 个答案:

答案 0 :(得分:1)

是的,你的js.erb应该可以正常工作,只要你不混合html。您可以使用它将其转换为字符串:

erb  = ERB.new("js_erb_code")
render erb.result