2015-10-28 3 views
1

У меня есть следующий видРендер парциальное после изменения выбора

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

Я хочу сделать частичное С этой точки зрения после выбора одного из вариантов. Как я могу это сделать?

ответ

1

Самый простой способ визуализации парциальное с display:none

<div id='foo' style='display:none'> 
    <%= render :foobar %> 
</div> 

И когда пользователь выбирает что-то, показать его JS (Jquery).

$('[name=question_type]').change(function() { 
    $('#foo').show(); 
}); 
+1

Я бы не сделать это в форме, потому что входы в скрытом DIV будет ** ** еще передаваться как параметры при отправке формы. Гораздо лучше загрузить/удалить/заменить содержимое div внутри обработчика события «change» (вместо show/hide). – Jaxx

+0

Скрытые значения тега 'input' будут переданы, но просто' div' – shirakia

0

Если вы используете JQuery, то попробуйте следующее:

VIEW

<%= 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 
    } 
    }); 
} 

EDIT (См. Комментарии)

Как вы просили, чтобы вам нужно было отображать частичные для каждой опции. Таким образом, для каждого выбора опции вам нужно нажать метод контроллера. В моем примере url - это конечная точка контроллера (например: - render_radio_some_controller_path).

def render_radio 
    render :partial => "radio" 
end 

После этого, он будет идти к блоку успеха Ajax вызова и данных будет иметь HTML, определенный в radio.html.erb. Теперь, вы просто должны использовать jQuery обновить нужный Див HTML с данных (например: - jQuery("#some_div").html(data);)

+0

Не могли бы вы объяснить мне, что мне нужно написать в контроллере, чтобы я мог отображать файл _radio.html.erb? Или какие данные я должен передать переменным данным? –

+0

Я не знаю, что я делаю неправильно. У меня есть функция someFunction (url) {jQuery.ajax ({url: url, data: {some_data: "data_value"}, success: function (data) {jQuery (" #some_div "). html (data);}}); } Это не работает, и я не знаю почему :( –

+0

Тогда rob, вам очень сложно сказать вам, что не так, пока я не увижу журналы ошибок. – Abhi

Смежные вопросы