мой веб-сайт позволяет пользователям успешно размещать комментарии верхнего уровня, но у меня много проблем с комментариями детей. Я использую полиморфные ассоциации, поэтому модель комментариев может применяться к статьям, профилям и изображениям. В каждом из трех случаев в комментарии модель будет «комментируемой».
Я хочу создать ссылку для ответа рядом с каждым отдельным комментарием, которая передает "идентификатор" этого конкретного комментария на страницу просмотра "нового" комментария. Затем я хочу, чтобы метод "create" комментариев использовал этот идентификатор, @top_level_comment = Comment.find (id), и создал нового потомка, используя параметры, указанные пользователем в представлении "new" комментариев, @ 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%>
Как мне изменить это, чтобы сделать то, что я хочу сделать из описания в верхней части этого поста? Полиморфный путь не работает. Я думаю, что это не работает, потому что commentable работает только со статьями, профилями и изображениями, но не комментариями. Как мне изменить путь, чтобы он перешел на страницу комментариев «новая» при передаче идентификатора текущего комментария (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">}
Добавлена следующая новая информация 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 был @comment, с которого пользователь нажал ответ? Вот ссылка, которая позволяет пользователю ответить на комментарий:
| <%= link_to "Reply", new_comment_path(comment.children.new) %>
Большое спасибо.