【问题标题】:Issue with Rendering Ajax/Rails渲染 Ajax/Rails 的问题
【发布时间】:2012-03-08 05:30:44
【问题描述】:

情况:目前有一个在微博下分页的评论模型。我正在尝试让下一个按钮呈现属于 micropost 的 cmets。

问题:我不确定如何制定路线/行动以使这些 cmets 通过。

代码:我有一些代码我会在下面提供,如果有什么不对的地方请帮忙。

非常感谢所有帮助。

参考文献Issue with Ajax Appending

用户控制器

  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

【问题讨论】:

  • 你在用户控制器中做什么?您正在设置@comment 3 次...为什么/如何用户、cmets 和学校共享相同的 ID?我不明白你想要做什么......
  • @klump 我更新了控制器对不起,我想做的是让 Pagination JS 通过路由/操作将 cmets 渲染到用户显示页面上,但我不确定如何去做这个,很抱歉造成混乱
  • 所以当用户点击带有“CommentPagin”的 div 时,你想显示 cmets 吗?一下子?
  • 是用户 -> miniposts -> cmets?
  • 你能发布你的 routes.rb 吗?

标签: javascript ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1


【解决方案1】:

向 microposts 控制器添加新操作:

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/cmets.html.erb),您可以在其中根据需要显示所有 @cmets

并为您的微博资源添加新成员get :comments

现在您可以在浏览器中尝试 /microposts/(在此处添加微博 id)/cmets 这应该会为您提供用户的所有 cmets 并根据需要对其进行格式化。

最后一部分是最简单的:当用户点击 div 时,通过 ajax 向该站点发出请求,并将答案附加到要显示 cmets 的 div 上。代码可能如下所示:

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

希望你有一个想法。如果它不起作用,请报告

【讨论】:

  • 对不起,如果我让您感到困惑,但我正在尝试获取特定 mircoposts 的所有 cmets,而不是用户发布的所有 cmets。如果可以的话,我会发布该网站的图片,但就像 facebook 一样,发布帖子时会有一个评论部分,一旦它下面有几个 cmets,它就会显示下一个按钮,显示该帖子的所有 cmets,怎么能我为那个 micropost 渲染了其余的 cmets。很抱歉有任何困惑
  • 我会试试这个,如果有任何问题,我会发消息给你,非常感谢:),这背后的逻辑是渲染页面上的微博的所有 cmets,然后取这些cmets 并从该页面呈现它,对吗?
  • 几乎。我在所有 cmets 中搜索微博。然后他们被渲染成html。这通过 ajax 请求获取并附加到 div 中。
猜你喜欢
  • 2011-06-13
  • 2011-05-24
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 1970-01-01
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多