У меня есть представление, которое отображает частичный список всех событий, созданных пользователем, со ссылкой на редактирование рядом с ним. Я хочу, чтобы когда пользователь нажимал кнопку «Изменить», внизу отображалась часть формы, чтобы вы могли редактировать это событие.
Для простоты мне удалось сделать так, чтобы идентификатор кнопки совпадал с идентификатором события. Итак, я хочу, чтобы при нажатии кнопки с идентификатором 2 внизу отображалась форма для редактирования события с идентификатором 2.
Я думаю, мне нужно сделать какой-то вызов AJAX для частичного рендеринга, но я не знаю, как это сделать. Любая помощь будет высоко оценена, спасибо.
Все, что у меня есть до сих пор (все кнопки редактирования имеют класс btn-info):
$(document).ready(function(){
$('.btn-info').click(function(e){
e.preventDefault;
var btnID = this.id;
//something here to get the partial to render
});
});
Могу ли я использовать что-то вроде следующего для вызова частичного? Я знаю, что это не работает, но может дать лучшее представление о том, чего я пытаюсь достичь:
$("#events").html("<%= escape_javascript render( edit_event_path(btnID) ) %>");
ОБНОВЛЕНИЕ: По запросу контроллеры и представления:
Изменить действие на контроллере событий:
def edit
@event = Event.find(params[:id])
respond_to do |format|
format.html
format.js
end
end
Проекты показывают представление с вставленным javascript:
<script>
$(document).ready(function(){
$('#new-event-button').click(function(e){
e.preventDefault();
$('#edit-events').hide();
$('#delete-events').hide();
$('#new-event').slideDown(function(){
$('html, body').animate({
scrollTop: $(document).height()-$(window).height()},200,"linear"
);
});
});
$('#edit-events-button').click(function(e){
e.preventDefault();
$('#new-event').hide();
$('#delete-events').hide();
$('#edit-events').slideDown(function(){
$('html, body').animate({
scrollTop: $(document).height()-$(window).height()},200,"linear"
);
});
});
$('#delete-events-button').click(function(e){
e.preventDefault();
$('#new-event').hide();
$('#edit-events').hide();
$('#delete-events').slideDown(function(){
$('html, body').animate({
scrollTop: $(document).height()-$(window).height()},200,"linear"
);
});
});
$('.btn-info').click(function(e){
e.preventDefault;
$('#events-forms').after('<%= escape_javascript( render :partial => "eventform", :locals => { :event => @event } ) %>');
});
});
</script>
<div class="content-box timeline-box">
<div id="my-timeline"></div><br /><br />
<br />
<button id="new-event-button" class="btn btn-success btn-large">New Event</button>
<button id="edit-events-button" class="btn btn-info btn-large">Edit Events</button>
<button id="delete-events-button" class="btn btn-danger btn-large">Delete Events</button>
<div id="events-forms">
<div id="new-event">
<%= render :partial => "new_event", :locals => { :event => Event.new(:timeline_id=>@timeline.id) } %>
</div>
<div id="edit-events">
<%= render :partial => "edit_events", :locals => { :events => current_user.events } %>
</div>
<div id="delete-events">
<%= render :partial => "delete_events", :locals => { :events => current_user.events } %>
</div>
</div>
И форма для редактирования события ('_eventform.html.erb'):
<%= form_for(event) do |f| %>
<% if event.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(event.errors.count, "error") %> prohibited this event from being saved:</h2>
<ul>
<% event.errors.full_messages.each do |msg| %>
<li><%= msg %></li>
<% end %>
</ul>
</div>
<% end %>
<%=f.hidden_field 'timeline_id', :value => current_user.timeline.id %>
<div class="field">
<%= f.label :start_date %><br />
<%= f.date_select :start_date %>
</div>
<div class="field">
<%= f.label :headline %><br />
<%= f.text_area :headline %>
</div>
<div class="field">
<%= f.label :text %><br />
<%= f.text_area :text %>
</div>
<div class="field">
<%= f.label :media %><br />
<%= f.text_area :media %>
</div>
<div class="field">
<%= f.label :caption %><br />
<%= f.text_area :caption %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>