Ce ne pas possible,mon ami。
作为评价所提到的,Ruby是服务器; javascript是客户端。这意味着两件事情之一:
- 构建的JavaScript运行时(不推荐)
- 发送AJAX/JavaScript值服务器(通过Ajax)
得到这个工作正确的,你需要通过ajax发送请求:
#app/assets/javascripts/application.js
$(document).on("change", "#some_id", function(e) {
$.get("forms/update", {index: $(this).val(), value: $(this).attr('id').to_i});
});
这将需要通过适当的路由&控制器动作:
#config/routes.rb
get "color_form", to: "application#color_form"
#app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
respond_to :js, :html
def color_form
@id = params[:id]
@value = params[:value]
end
end
#app/views/application/color_form.js.erb
$('option_value_0').html('<%=j render partial: 'color_form', locals: { index: @index, id: @value } %>')
-
是,这是啰嗦,但它是正确的方式。
如果您想要快捷方式,则可以预先加载color_form
部分,然后使用javascript功能更改id
或value
参数。如果你愿意,我可以写这个。
预紧
如果你想做到这一点没有阿贾克斯,标准方式(包括modals
,太)是部分添加到您的网页和“隐藏”了。
这样,你的JS有实际的HTML代码,无论是表演,或追加到页面的其他部分:
#view
<div class="hidden">
<%= render partial: 'color_form', locals: { f: f, index: "x", id: "y" } %>
</div>
#app/assets/javascripts/application.js
$(document).on("change", "#some_id", function(e) {
$partial = $(".hidden").html();
$partial.find("#id").html($(this).attr('id').to_i);
$partial.find("#index").html($(this).val());
$('option_value_0').html($partial);
});
红宝石在服务器上运行,JS在客户端上,所以两者不能直接交互。要做你需要的东西,你需要使用AJAX将你的JS变量发送到服务器。 –