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

时间:2012-03-06 14:03:40

标签: ruby-on-rails ruby-on-rails-3

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

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

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

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

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

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

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

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

此网址为:

/帖/:POST_ID /体

对我而言看起来是正确的。

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

为什么你只需要身体?为什么不归还整个帖子而只是使用身体?

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

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)。

我希望这有帮助!