문제

누군가가 이미 레일에 나사산 댓글 (더 나은 용어 부족)을위한 시스템을 구축했는지 또는 직접 구축 해야하는지 궁금합니다.

분명하지 않은 경우, 내가 언급하는 것은 Reddit 's와 같은 의견 시스템으로 자동 들여 쓰기 회신이 트리의 가지처럼 보이도록 회신합니다 (바람직하게는 Reddit과 마찬가지로 투표와 함께).

누군가 가이 작업을 수행하는 코드를 지적 할 수 있다면 대단히 감사하겠습니다.

또는이 기능을 포함하는 오픈 소스 프로젝트가있을 수 있습니다.

지금까지 나는 철도에서 하나를 찾을 수 없었습니다.

또한 Rails 포럼에서 이것을 물어 보는 것이 더 좋을까요? 그렇다면 어느 쪽이든? (나는 레일을 처음 접한다)

도움이 되었습니까?

해결책

사용 acts_as_tree 플러그인을 사용하면이를 쉽게 구현할 수 있어야합니다. 사용하여 설치하십시오

ruby script/plugin install acts_as_tree

app/models/comment.rb

class Comment < ActiveRecord::Base
  acts_as_tree :order => 'created_at'
end

db/migrate/20090121025349_create_comments.rb

class CreateComments < ActiveRecord::Migration
  def self.up
    create_table :comments do |t|
      t.references :parent
      t.string :title
      t.text :content
      ...
      t.timestamps
    end
  end

  def self.down
    drop_table :comments
  end
end

app/views/comments/_comment.html.erb

<div id="comment_<%= comment.id %>">
  <h1><%= comment.title %></h1>
  <%= comment.content %>
  <%= render :partial => 'comments/comment', :collection => comments.children %>
</div>

app/views/comments/show.html.erb

<div id="comments">
  <%= render :partial => 'comments/comment', :object => Comment.find(params[:id]) %>
</div>

마법이 발생합니다 show.html.erb 전화 할 때 <%= render :partial => 'comments/comment', :object => Comment.find(params[:id]) %>, 이로 인해 부분적으로 모든 어린이의 의견을 재귀 적으로 렌더링하게합니다. 깊이에 대한 한계를 원한다면 부분 또는 모델에서 수행 할 수 있습니다.

편집하다:
이렇게하면 모든 깊이에 대해 HTML에서 동일한 간격으로 모든 주석을 남길 수 있습니다. 읽기 쉬운 html을 생산하려면 render(...).gsub(/^/, "\t") 이것은 재귀 적으로 작동 할뿐만 아니라 멋지게 들여 쓰기 HTML을 생성 할 것입니다.

나는 그것을 내 자신의 방법으로 결합했습니다 app/helpers/application_helper.rb

def indented_render(num, *args)
  render(*args).gsub(/^/, "\t" * num)
end

이제 전화 할 수 있습니다 <%= indented_render 1, :partial => 'comments/comment', ... %>

편집하다:
누락 된 폐쇄를 수정했습니다 </h1> 예에서 태그.

다른 팁

Hector와 Samuel이 제공 한 Actsastree 문서에 대한 링크는 깨진 것 같습니다. 문서를 얻을 수 있습니다

 
http://web.archive.org/web/20061011101510/http://wiki.rubyonrails.org/rails/pages/ActsAsTree

(어떤 이유로 링크 된 링크가 잘못 표시 될 때 프리 태그를 사용했습니다).

has_threaded_comments gem이 있으며 사용하지는 않지만 정확히 다음과 같이 보입니다.https://github.com/aarongough/has_threaded_comments

당신은 시도 했습니까? acts_as_tree 모델에 플러그인? 공식 ActiveRecord 구성 요소입니다.

http://wiki.rubyonrails.org/rails/pages/actsastree

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top