2010-03-25 2 views
0

В блоге в Rails Я хочу иметь пути, какне уникальные идентификаторы в маршруте в Rails

http://mydomain.com/posts/28383/comments#21

Это 21 комментарий на 28383th пост. 21 не является уникальным идентификатором, но пара 28383, # 21 уникальна.

Как это сделать в Rails? Нужно ли менять маршруты? модель? Я буду очень благодарен, если вы можете мне точку в правильном направлении

Благодаря

ответ

2

В config/routes.rb, вы хотите, чтобы обработать сообщения и комментарии как ресурсы:

map.resources :posts do |post| 
    post.resources :comments 
end 

Это позволяет использовать post_comments_path(@post), который превращается в /posts/28383/comments.

Далее, в представлении, в котором перечислены комментарии к сообщению, добавьте к каждому комментарию атрибут HTML id. Например:

<div id="comment-<%= comment.id %>"> 
    <%= comment.body %> 
</div> 

Обратите внимание, что HTML атрибут id с префиксом comment- потому, что он must begin with an alphabetic character.

Вы можете связать непосредственно с комментарием, как это:

<%= link_to 'Comment permalink', 
      post_comments_path(@post, :anchor => 'comment-' + @comment.id) %> 

Обратите внимание, что идентификатор сообщения и комментарий ID используются для отдельных вещей: идентификатор сообщения используется для создания базы URL, в то время как идентификатор комментария используется как якорь для перехода в правую часть страницы.

+0

Спасибо Рон, но где я должен сказать, что comment_id не является уникальным ключом? (в противном случае у меня будут огромные комментарии) – Victor

+0
+0

Да, действительно. –

0

Решение Ron DeVera в порядке. С другой стороны, вас может заинтересовать только один комментарий.

Вы можете сделать это вручную с чем-то вроде этого в routes.rb

map.connect 'posts/:id#:comment_id', :controller=> 'comments', :action=>'show_comment' 

, а затем в вашем методе контроллера show_comment вы можете получить доступ к параметру с помощью params[:comment_id].

Остальная часть этого решения будет идти вперед таким образом, включая получение комментария с поста post.comments[params[:comment_id]].

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