Rails 3.2嵌套路由和AJAX

Rails 3.2嵌套路由和AJAX,ajax,routes,ruby-on-rails-3.2,Ajax,Routes,Ruby On Rails 3.2,我正在使用RubyonRails3.2,并创建了一个简单的测试博客应用程序。有一个Post模型和一个Comment模型,其中Post有许多:comments,Comment属于:Post 在路由中。rb: resources "posts" do resources "comments" end 我在父帖子页面的底部显示评论,并通过AJAX提交新评论。因此,我认为用户没有必要访问/posts/1/comments/XXX。但是,如果我从我的路线中删除资源“注释”,那么注释功能将不再起作用。

我正在使用RubyonRails3.2,并创建了一个简单的测试博客应用程序。有一个Post模型和一个Comment模型,其中Post
有许多:comments
,Comment
属于:Post

在路由中。rb:

resources "posts" do
  resources "comments"
end

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

作为解决方案,您可以将路由条件设置为请求为xhr请求。您可以通过以下方式执行此操作:

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

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

您可以在中找到有关路由约束的更多信息。

作为解决方案,您可以将路由条件设置为请求为xhr请求。您可以通过以下方式执行此操作:

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

resources "posts" do
  resources "comments", :constraints => OnlyAjaxRequest.new
end
您可以在中找到有关布线约束的详细信息