如何为基于ajax的应用程序构建rails 3控制器和视图

我想知道为基于ajax的rails应用程序构建控制器和视图的最佳实践。

例如,如果我有一个博客,它由post组成,我希望能够动态刷新post正文,我将如何构建我的应用程序来执行此操作。

从技术上讲,你只应该在控制器中有动词 – 即动作或做单词。 这意味着执行以下操作将是错误的:

class PostsController < ApplicationController #... def body #return body of a particular post end #... end 

所以我的另一个想法是将其创建为嵌套资源:

 resources :posts do resource :body, :controller = "posts/body" end 

然后创建一个post/正文子控制器:

 class Posts::BodyController < ApplicationController def show #return body of a particular post end end 

这个url将是:

/职位/:POST_ID /体

对我来说看起来是正确的。

还有其他人有更好的想法吗?

好问题。 我有一个应用程序,它提供ajax请求以及常规页面请求,我采用了第一种方法将ajax操作放在资源控制器的主体中。

我个人更喜欢这种方法,因为它可以使控制器易于管理。 第二种想法是将它创建为嵌套资源,最终会有很多只执行单个ajax操作的控制器。 我更喜欢高内聚解决方案,其中关于Posts的所有内容都是在PostsController中完成的,而不是创建大量的单动作子控制器。

为什么你只需要身体? 你为什么不退回整个post而只是使用身体?

如果这还不够好你可以做这样的事情

 def show @post = Post.find(params[:id]) # set some etag stuff up so we don't have to request this again if it hasn't changed response.last_modified = @post.created_at.utc response.etag = @post return head :not_modified unless request.fresh?(response) respond_to do |wants| wants.js { render :json => @post.to_json(:only => params[:select]) } end end 

上面的代码存在一些可能的问题。 首先,如果find()返回一个可链接的查询,我不记得我的头脑。其次,为了安全起见,你应该清理fields这样它只返回一个白色的字段列表(你可以用slice来做)。

我希望这有帮助!