Резьбовые комментарии не работают для меня - PullRequest
0 голосов
/ 15 сентября 2010

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

Я хочу создать ссылку для ответа рядом с каждым отдельным комментарием, которая передает "идентификатор" этого конкретного комментария на страницу просмотра "нового" комментария. Затем я хочу, чтобы метод "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) %>

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

1 Ответ

1 голос
/ 15 сентября 2010

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

Тогда это:

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

#routes.rb

map.resources :comments, :articles, :profiles, :pictures do |commentable|
  commentable.resources :comments, :only => [:new, :create]
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...