Rails Ajax Hide / Show Toggle Link используя RJS - PullRequest
2 голосов
/ 12 сентября 2010

Я хочу, чтобы пользователи могли оставлять комментарии. Под каждой отправкой я хочу, чтобы там была ссылка «Комментарии (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 Ответ

1 голос
/ 12 сентября 2010

Это можно сделать с помощью библиотеки прототипов 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, чтобы загрузить все комментарии внутри комментариев div

Ex: link_to_remote "View Comments",: 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"

...