开发者

not unique ids in a route in Rails

In a blog in Rails I want to have paths like

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

This is the 21st comment of the 28383th post. The 21 is not an unique id, but the pair 28383, #21 is开发者_StackOverflow unique.

How can I do this in Rails? Do I have to change the routes? the model? I will be very thankful if you can point me in the right direction

Thanks


In config/routes.rb, you'll want to treat posts and comments as resources:

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

This lets you use post_comments_path(@post), which turns into /posts/28383/comments.

Next, in the view that lists the post's comments, add an HTML id attribute to each comment. For example:

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

Note that the HTML id attribute is prefixed with comment- because it must begin with an alphabetic character.

You can then link directly to a comment like this:

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

Note that the post ID and the comment ID are used for separate things: the post ID is used to generate the base of the URL, while the comment ID is used as the anchor for jumping to the right part of the page.


Ron DeVera's solution is fine. On the other hand, you may be interested in only showing one comment.

You could do this by hand with something like this in the routes.rb

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

and then in your controller method show_comment you could access the parameter via params[:comment_id].

The rest of this solution would go forward by hand like this, including getting the comment from the post post.comments[params[:comment_id]].

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜