0

我正在使用 Ruby on Rails 3.2 并创建了一个简单的测试博客应用程序。有一个 Post 模型和一个 Comment 模型,其中一个 posthas_many :comments和一个 comment belongs_to :post

在 routes.rb 中:

resources "posts" do
  resources "comments"
end

我在父帖子页面的底部显示评论并通过 AJAX 提交新评论。因此,我认为用户没有必要能够访问/posts/1/comments/XXX。但是,如果我resources "comments"从我的路线中删除,那么评论功能将不再起作用。如何防止用户在浏览器中访问 /posts/1/comments/XXX 但保持评论 AJAX 功能正常工作?

4

1 回答 1

3

作为解决方案,您可以做的是将请求设置为 xhr 请求的条件。您可以通过以下方式进行操作:

# routes.rb
class OnlyAjaxRequest
  def matches?(request) 
    request.xhr?
  end
end

resources "posts" do
  resources "comments", :constraints => OnlyAjaxRequest.new
end

您可以在此博客文章中找到有关路由约束的更多信息。

于 2012-10-04T21:42:10.733 回答