更改后选择部分渲染

时间:2015-10-28 14:40:35

标签: ruby-on-rails ruby partial-views onchange partial

我有以下观点

<%= 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 %>

我想在选择其中一个选项后在此视图中渲染部分。 我怎么能这样做?

2 个答案:

答案 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);