我有以下观点
<%= form_for @survey do |f| %>
<div class="field">
<%= f.label :title %><br>
<%= f.text_field :title %> <br><br>
<%= f.label :description %><br>
<%= f.text_field :description %><br><br>
</div>
<%= f.fields_for :survey_sections do |builder| %>
<%= builder.text_field :title, :placeholder => "Abschnittsbeschreibung" %><br>
<%= builder.fields_for :questions do |quest| %>
<%= quest.text_field :text, :placeholder => "Frage" %> <br>
<%= quest.fields_for :answers do |ans| %>
<%= ans.text_field :text, :placeholder => "Antwort" %> <br>
<%end%>
<%end%>
<%= select_tag("question_type",options_for_select([["Radio", "radio"],["Checkbox", "check"]])) %>
<% end %>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
我想在选择其中一个选项后在此视图中渲染部分。 我怎么能这样做?
答案 0 :(得分:2)
最简单的方法是使用display:none
<div id='foo' style='display:none'>
<%= render :foobar %>
</div>
当用户选择某些内容时,请通过JS(jQuery)显示它。
$('[name=question_type]').change(function() {
$('#foo').show();
});
答案 1 :(得分:0)
如果您使用的是jQuery,请尝试以下方法:
查看强>
<%= select_tag("qustion_type",options_for_select([["Radio", "radio", {:onclick => "someFunction(#{controller_path})"}],["Checkbox", "check", {:onclick => "someFunction(#{controller_path})"}]])) %>
<强> JAVASCRIPT 强>
function someFunction(url) {
jQuery.ajax({
url: url,
data: {some_data: "data_value"},
success: function(data) {
//data has the html code that you render in controller
}
});
}
编辑(见评论)
正如您所说,您需要在每个选项上选择部分渲染。因此,对于每个选项,您需要使用控制器方法。在我的示例中,url
是控制器端点(例如: - render_radio_some_controller_path )。
def render_radio
render :partial => "radio"
end
在此之后,它将转到Ajax调用的成功块,数据将在radio.html.erb
中定义html。现在,您只需使用jQuery
使用数据更新所需的div html(例如: - jQuery("#some_div").html(data);
)