Rails Ajax Hide/Show Toggle Link используя RJS
Я хочу, чтобы пользователи могли комментировать материалы. Под каждой отправкой я хочу, чтобы была ссылка "Комментарии (2)"... при нажатии на эту ссылку она динамически загружалась в комментариях, а также простая форма для добавления нового комментария. Когда пользователь отправляет новый комментарий, я хочу, чтобы он загружался асинхронно внизу списка.
Как у меня это работает сейчас так:
// index.html.erb
<p class="comments_view_toggle">
<%= link_to_remote("▼ view comments (#{answer.comments.count})", :controller => "comments", :action => "show", :submission => submission, :update => "comment") %>
</p>
// comments_controller.rb
def show
@submission = Submission.find(params[:submission])
respond_to do |format|
format.html { redirect_to root_url }
format.js
end
end
// show.rjs
page.insert_html :bottom, :comment, :partial => 'show', :locals => { :submission => @submission }
// _show.html.erb
<ul id="comment_list">
<%= render :partial => 'comments/comment', :collection => submission.comments %>
</ul>
<div class="clear"></div>
<% form_remote_for Comment.new do |f| %>
<%= hidden_field_tag(:submission_id, answer.id)%>
<%= hidden_field_tag(:user_id, current_user.id)%>
<%= f.text_area :message %>
<%= f.submit "comment", :disable_with => 'commenting...' %>
<% end %>
Я даже не работал над второй частью функции переключения (скрыть), потому что всякий раз, когда я нажимаю на ссылку, она перезагружает всю страницу под ссылкой, а не просто запускает партиал, и я понятия не имею, почему. Похоже, что не передает параметры правильно. Я все об этом ошибаюсь? Можете ли вы указать мне правильное направление?
1 ответ
Вы можете сделать это с помощью библиотеки прототипов ajax, которая поставляется с rails по умолчанию. Или вы можете сделать это с JQuery,
Вот один из способов сделать это
скажем, у вас есть следующая HTML-страница
<div id="submission">
// your submission details goes here
</div>
//here you will have your link says "comments"
<div id="comments">
</div>
После того, как вы нажмете ссылку "Комментарии", вы можете использовать link_to_remote, чтобы загрузить все комментарии в разделе комментариев.
Пример: link_to_remote "Просмотреть комментарии",:update => "comments",:url => {:action => "comments",:id => submission.id }
так ваш контроллер будет выглядеть
class SubmissionsController < ApplicationController
#your other code goes here
def list
#code to generate the comments list
render :partial => 'comments_list', :object => @comments
end
end
и вы можете иметь частичное для списка комментариев "_comments_list"