2010-09-14 3 views
0

У меня даже есть возможности для публикации комментариев на верхнем уровне, но у меня проблемы с комментариями. Я использую полиморфные ассоциации, поэтому модель комментариев может применяться к статьям, профилям и изображениям. В каждом из трех случаев комментарий будет считать модель «комментарием».Никнейм Комментарии для меня не работают

Я хочу создать ответную ссылку рядом с каждым отдельным комментарием, который передается в «id» этого конкретного комментария на страницу комментариев «новый». Затем я хочу, чтобы метод комментариев «create» использовал этот id, @top_level_comment = Comment.find (id) и создавал новый дочерний элемент, используя параметры, которые пользователь указал в «новом» представлении комментариев, @ top_level_comment.children.create (params [: comment]), но я не знаю, как записать его в код.

Таким образом, пользователь начнет на статью шоу странице, которая имеет следующий контроллер:

def show 
    @article = Article.find(params[:id]) 
    @commentable = Article.find(params[:id]) 
    @comments = @commentable.comments 
    @comment = Comment.new 
    @title = @article.title 
    end 

Затем он будет прокручиваться вниз на комментарии внизу, и видит, что есть ссылка ответа через статью шоу странице:

<div id="comment <%= comment.id %>"> 
    <%= comment.title %> 
    | <%= link_to "Permalink", polymorphic_path([@commentable, comment]), :action => :show %> 
    | <%= link_to "Reply", polymorphic_path([@commentable, @comment]), :action => :new %> 
    | <%= link_to "Edit Comment", polymorphic_path([@commentable, comment]), :action => :edit %> 
    | <%= link_to 'Delete Comment', [[@commentable, comment]], :confirm => "Are you sure?", :method => :delete %><br /> 
    <%= comment.content %><br /> 
    <%= comment.user.name %><br /> 
    <%= @comment.children.count %><br /><br /> 
    <%= render :partial => 'shared/comment', :collection => @comment.children %> 

</div> 

Именно эта линия, в частности, когда у меня возникают проблемы:

| <% = link_to «Ответить», polymorphic_path ([@ commentable, @comment]),: action =>: new%>

Как изменить это, чтобы делать то, что я хочу сделать, из описания в верхней части эта почта? Полиморфный путь не работает. Я думаю, что это не работает, потому что комментарий только работает со статьями, профилями и картинками, но не с комментариями. Как изменить путь, чтобы он переходил на страницу комментариев «new» при передаче идентификатора текущего комментария (comment.id)?

Кроме того, моя форма для добавления новых комментариев выглядит следующим образом:

<%= form_for([@commentable, @comment]) do |f| %> 
    <%#= render 'shared/error_messages', :object => f.object %> 
    <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 %> 

Вот что маршрутизация выглядит следующим образом:

resources :articles do 
    resources :comments 
    end 

Здравствуйте, когда я следую за маршрутизацией Марка, я получаю это, когда Я стараюсь, чтобы просмотреть статью:

No route matches {:controller=>"comments", :action=>"create", :article_id=>#<Article id: 300, title: "Filler Title", content: "Sunt sit est incidunt et.", user_id: 6, created_at: "2010-09-08 17:42:10", updated_at: "2010-09-08 17:42:10">} 

Добавлена ​​следующая новая информация о September 16, 3:48 PST:

Вот форма, которая позволяет пользователю комментировать комментарий, но не работает, когда комментарий @commentable является комментарием.

1: <%= form_for([@commentable, @comment]) do |f| %> 
2: <%#= render 'shared/error_messages', :object => f.object %> 
3: <div class="field"> 
4:  <%= f.label :title %><br /> 

комментарии контроллер «новый»

def new 
    @commentable = find_commentable 
    @comment = Comment.new 
    end 

При ответе на комментарий, он идет выше, но она не знает, что @commentable есть, поэтому его значение равно нулю при ответе на комментарий. Как это сделать, чтобы @commentable был @комментами, от которых пользователь ответил? Вот ссылка, которая позволяет пользователю ответить на комментарий:

| <%= link_to "Reply", new_comment_path(comment.children.new) %> 

Большое спасибо.

ответ

1

Несомненно, если вы используете полиморфные отношения, комментируемые комментариями, вы должны определить самореферентную полиморфную связь между комментарием и комментариями, то есть. комментарий имеет много комментариев как комментарий.

Тогда это:

<%= link_to "Reply", [@comment, @comment.comments.new] %> 

#routes.rb 

map.resources :comments, :articles, :profiles, :pictures do |commentable| 
    commentable.resources :comments, :only => [:new, :create] 
end 
+0

Здравствуйте, когда я использую следующее: <% = link_to "Ответить", polymorphic_path ([комментарий, comment.children.new]): действие =>: новый%> Затем я получаю эту ошибку: undefined method 'comment_comments_path 'для # <# <Класс: 0xb1ba480>: 0xb1b9134>. Я опубликовал свои маршруты.rb в главной теме. – Kelp

+0

Привет. Вам нужно будет настроить маршрут. Я отредактирую свой ответ^Также удалите action =>: new, как в моем примере. :) – mark

+0

Здравствуйте, я добавил маршруты (минус части карты, я использую Rails 3), и я получаю сообщение об ошибке, которое я добавлю на главный пост. – Kelp

Смежные вопросы