我想知道为基于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 /体
对我而言看起来是正确的。
还有其他人有更好的想法吗?
答案 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
)。
我希望这有帮助!