从jquery和haml中渲染出局部

我计划的function是根据从select标签中选择的数字插入一些表单元素。

我有一个名为number_of_passengers的选择标签,我计划为所选数字动态附加新的乘客字段。 假设我从number_of_passengers中选择2,那么2个表单应该出现在fieldset中。 这些表格包含姓名,年龄等。

我试着这样做:

从jquery调用rails函数?

并且只是将它转换为haml-speak但是每当我使用:javascript标记时我都会收到错误。 我也不认为一旦我进入javascript标签就可以“逃脱”

:javascript $('#number_of_passengers').change(function() { var $num_of_passengers = $(this).val(); for($i=0; $i<$num_of_passengers;$i++) { $('.passenger-info ul').append(' "new_passenger", :locals => {:booking => @booking }) %>'); } }) 

因为我在form_for中,如何将@booking变量传递给本地? 这看起来真的很复杂,而且我打算从循环20次(20个最大乘客)中做出肮脏的方式,然后根据所选的数字隐藏/显示它们。 但那太脏了你不觉得吗?

要使插值工作,你需要做类似的事情

 != "$('.passenger-info ul').append('#{escape_javascript( render :partial => 'new_passenger', :locals => {:booking => @booking })}'); 

如此简单说:将!=添加到行的开头,并在双引号之间包含字符串。

关于@booking问题:我建议你研究一些嵌套的表单示例,以便让你更清楚(例如这个和这个 railscast)。

我实际上设法通过添加:

 respond_to do |format| format.js { render :partial => "new_passenger" } end 

所以即使请求是在js中,它也会返回一个html部分。 俏皮的

Rails语法一直在变化,但不应该这样

 render :partial => "new_passenger", :locals {:booking => @booking }) 

 render :partial => "new_passenger", :locals => {:booking => @booking }) 

您可以在javascript块中转义javascript,因为您正在评估ruby标记。

您收到了哪些错误消息?

你的问题的后半部分对我来说并不清楚,但这正是你要找的:

 - form_for @user do |f| # f.object is equal to @user