you site crashed because the comment on the page article are found by
pulling the article_id from the params but you want to add childrens to a
comment and there is no way to pull that id with the find_commentable
function

On Sat, Sep 11, 2010 at 12:47 PM, radhames brito <[email protected]> wrote:

> your are doing a polimorphic assotiacion on the same model and another
> model , thats not needed, you only need a self referential association and a
> has many, your main problem is that you are using a polymorphic associations
> where there was no need to.
>
> you comment table should have
>
> t.integer :article_id
> t.integer :parent_id
>
> drop the polymorphic association if the comments will only belong  to
> articles and install the acts_as_three gem, then you'll be done with it.
>
> if you want to apply comment to something else besides articles then use
> the polymorphic association bad that is not need for the
> comments they just need to refer to themself.
>
> On Sat, Sep 11, 2010 at 12:07 AM, Kelp Kelp <[email protected]> wrote:
>
>> I've been having problems making threaded comments for the last few
>> days. Mainly with creating children and displaying the children.
>> Currently, I have comments shown at the bottom of my articles show view.
>> The top level comments work, but I do not really know how to implement a
>> way for users to "reply" to the top level comments and take them to a
>> form (the comment 'new' view) to create a new comment. I want the
>> controller to determine if the user is creating the new comment in an
>> article or in a comment and create the new comment as a child if its
>> parent is a comment. I've been facing multiple problems, maybe the
>> recursion messes up and I get an infinite loop.
>>
>> Here is the articles show controller:
>>  def show
>>    @article = Article.find(params[:id])               <====== you are
>> query the DB twice change this to
>>    @commentable = Article.find(params[:id])                    @article
>> =...@commentable=article.find(params[:id])
>>    @comments = @commentable.comments
>> #    @comments = @commentable.comments.paginate(:page => params[:page])
>>    @comment = Comment.new
>>    @title = @article.title
>>  end
>>
>> Here is my comments controller:
>>  def show
>>    @commentable = find_commentable
>>    @comment = @commentable.comments.find(params[:id])
>> #    @comments = @commentable.comments.paginate(:page => params[:page])
>>  end
>>
>>  def new
>>    @commentable = find_commentable
>>    @comment = Comment.new                      <==== this here makes no
>> sense it should be @commentable.build
>>
>>  end
>>
>>  def create
>>    @commentable = find_commentable
>>    if @comment.commentable_type == "Comment"                     <===== you
>> are doing polimorphic to the same model??
>>
>>      @comment = @commentable.children.create(param[:comment])
>>    else
>>      @comment = @commentable.comments.build(params[:comment])
>>    end
>>    @comment.user_id = current_user.id                       <==============
>> change to: @comment.user = current_user
>>
>>    if @comment.save
>>      flash[:success] = "Comment saved."
>>      redirect_to @commentable                           <==============
>> change to: redirect_to :back
>>
>>    else
>>      flash[:error] = "Error in creating comment."
>> #      @comments = @commentable.comments.paginate(:page =>
>> params[:page])
>>      render 'new'
>>    end
>>  end
>>
>> Here is the comment creation form:
>> <%= form_for([...@commentable, @comment]) do |f| %>
>>  <%#= render 'shared/error_messages', :object => f.object %>           
>> <=========
>> change to:      :f => f
>>  <div class="field">
>>    <%= f.label :title %><br />
>>    <%= f.text_field :title %>
>>  </div>
>>  <div class="field">
>>    <%= f.label :content %><br />
>>    <%= f.text_area :content %>
>>  </div>
>>  <div class="actions">
>>    <%= f.submit "Post Comment" %>
>>  </div>
>> <% end %>
>>
>> Here is the loop that goes through all of the existing comments:
>> <% unless @comments.nil? || @comments.empty? %>
>>    <%= render :partial => 'comments/comment', :collection =>
>> @comments               <=== change to:  render @comments
>>
>> %>
>>    <%#= will_paginate @comments %>
>> <% end %>
>>
>> Here is what each individual comment looks like:
>> <div id="comment <%= comment.id %>">
>>  <%= comment.title %>                                              <===
>> you are not scaping html
>>
>>  | <%= link_to "Permalink", polymorphic_path([...@commentable, comment]),
>> :action => :show %>               <======= no need for this
>>  | <%= link_to "Reply", polymorphic_path([...@commentable, @comment]),<===
>> pass [:new, @commentable, comment] instead
>> :action => :new %>
>>  | <%= link_to "Edit Comment", polymorphic_path([...@commentable,
>> comment]), :action => :edit %>           <=== pass [:edit, @commentable,
>> comment] instead
>>
>>  | <%= link_to 'Delete Comment', [...@commentable, comment]], :confirm =>
>> "Are you sure?", :method => :delete %><br />
>>  <%= comment.content %><br />
>>  <%= comment.user.name %><br /><br />
>>  <%= render :partial => 'comments/comment', :collection =>
>> @comment.children %>   <=== use acts_as_three gem
>>
>> </div>
>>
>> When I click reply, I get taken to:
>> http://localhost:3000/articles/299/comments and not
>> http://localhost:3000/articles/299/comments/new. I went into rails
>> console and gave one of my comments a comment child, and the recursive
>> nature of the threaded comments gave me recursion that crashed my site.
>> --
>> Posted via http://www.ruby-forum.com/.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby on Rails: Talk" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected]<rubyonrails-talk%[email protected]>
>> .
>> For more options, visit this group at
>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>
>>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to