Проблема с рендерингом Ajax / Rails - PullRequest
1 голос
/ 07 марта 2012

Ситуация : В настоящее время есть модель комментариев, которая разбивается на страницы под микросообщением.Я пытаюсь заставить следующую кнопку отображать комментарии, относящиеся к микросообщению.

Проблема : я не уверен, как сделать маршрут / действие , чтобыдовести эти комментарии до конца.

Коды : У меня есть код, который я предоставлю ниже, если что-то не так, пожалуйста, помогите.

Вся помощь очень ценится.

Ссылки : Проблема с Ajax Присоединение

Контроллер пользователя

  def show
    @user = User.find(params[:id])
    @micropost = Micropost.new
    @comment = Comment.new
    @comment = @micropost.comments.build(params[:comment])
    @microposts = @user.microposts.order('created_at DESC').paginate(:per_page => 10, :page => params[:page])
  end

Пагинация JS

$("#CommentPagin").on('click', 'a', function(e){
    // Get data from server - make sure url has params for per_page and page.
    $.get($(this).attr('href'), function(data){
        // refresh client with data
        $("#cc").append(data);
    });
});

Раздел комментариев

<div id='comments'>
  <% comments = micropost.comments.paginate(:per_page => 5, :page => params[:page]) %>
  <div id="CommentPagin">
  <span class="CommentArrowIcon"></span>
  <%= will_paginate comments, :page_links => false , :class =>"pagination" %>
  </div>
<%= render 'users/comments' %>
</div>

Раздел обработки комментариев

<div id="cc">
<% comments = micropost.comments.paginate(:per_page => 5, :page => params[:page]) %>
<%= render comments %>
</div>

ОБНОВЛЕНИЕ

Модель пользователя

class User < ActiveRecord::Base
  has_many :microposts
  has_many :comments
end

Модель микросообщений

class Micropost < ActiveRecord::Base
  belongs_to :user
  has_many :comments
  accepts_nested_attributes_for :comments
end

Комментарий Модель

class Comment < ActiveRecord::Base
  attr_accessible :content, :user_id, :micropost_id
  belongs_to :micropost, :counter_cache => true
  belongs_to :user
  belongs_to :school
end

Routes.rb

kit::Application.routes.draw do
  resources :pages
  resources :application
  resources :schools
  resources :microposts
  resources :comments
  resources :users
  resources :sessions
  resources :password_resets
  resources :relationships, only: [:create, :destroy]
  resources :users do
      member do
        get :following, :followers
      end
  end
  resources :microposts do
    member do
      post :vote_up, :unvote
    end
  end
  resources :microposts do
    member do
      post :upview
    end
  end
  resources :microposts do
    resources :comments
  end
  resources :schools do
    collection do
        get :mostrecent
        get :mostdiscussed
        get :highestrated
        get :viewcount
    end
  end

  match "/users/:id/personalstream" => "users#personalstream"
  match "/schools/:id/mostrecent" => "schools#mostrecent"
  match "/schools/:id/mostdiscussed" => "schools#mostdiscussed"
  match "/schools/:id/viewcount" => "schools#viewcount"
  match "/schools/:id/highestrated" => "schools#highestrated"  
  match "/schools/:id", :to => 'schools#show', :as => "school"
  match "/microposts/:id/comments" => "microposts#comments"
  match "/microposts/:id/upview" => "microposts#upview"
  match "/microposts/:id/vote_up" => "microposts#vote_up"
  match "/microposts/:id/unvote" => "microposts#unvote"
  get "log_out" => "sessions#destroy", :as => "log_out"
  get "sign_in" => "sessions#new", :as => "sign_in"
  get "sign_up" => "users#new", :as => "sign_up"
  get "home" => "users#home", :as => "home"

  root to: "schools#index"

end

1 Ответ

1 голос
/ 08 марта 2012

добавить новое действие в контроллер микросообщений:

app/controllers/microposts_controller.rb
def comments
  @micropost = Micropost.find(params[:id])
  @comments = @micropost.comments

  # we dont need all the html head stuff
  render :layout => false
end

написать представление (app / views / microposts / comments.html.erb), где вы отображаете все @комментарии, как хотите

и добавьте нового участника к вашему ресурсу микросообщений get :comments

теперь вы можете попробовать в браузере / microposts / (добавить идентификатор микросообщения здесь) / comments, это должно предоставить вам все комментарии для пользователяи отформатируйте их по своему желанию.

последняя часть самая простая: когда пользователь нажимает на div, отправляет запрос на этот сайт через ajax и прикрепляет ответ к div, где вы хотите отобразить комментарии,код может выглядеть так:

$("#CommentPagin").click( function(){
  $("#CommentPagin").load( "<%= micropost_comments_path( @user ) %>" );
});

надеюсь, у вас есть идея.сообщить, если не работает

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...