这很简单,我想通过调用DataMapper来处理正常的[show]请求,就像我在Merb中一样。
使用ActiveRecord我可以做到这一点:
class PostsController
def show
@post = Post.get(params[:id])
@comments = @post.comments unless @post.nil?
end
end
它通过捕获资源的异常来处理404。
DataMapper不会自动执行此操作,因此我现在正在使用此解决方案解决此问题: [感动答案]
可以告诉控制器在not_found函数内停止吗?
答案 0 :(得分:9)
我喜欢使用异常抛出,然后使用ActionController的rescue_from
。
示例:
class ApplicationController < ActionController::Base
rescue_from DataMapper::ObjectNotFoundError, :with => :not_found
def not_found
render file => "public/404.html", status => 404, layout => false
end
end
class PostsController
def show
@post = Post.get!(params[:id]) # This will throw an DataMapper::ObjectNotFoundError if it can't be found
@comments = @post.comments
end
end
答案 1 :(得分:0)
完成'旧的Merb方式':
class ApplicationController
def not_found
render file: "public/404.html", status: 404, layout: false
end
end
class PostsController
def show
@post = Post.get(params[:id])
not_found; return false if @post.nil?
@comments = @post.comments
end
end
再次:可以告诉控制器在not_found函数内停止而不是在show动作中显式调用'return false'吗?
编辑:感谢Francois找到更好的解决方案:
class PostsController
def show
@post = Post.get(params[:id])
return not_found if @post.nil?
@comments = @post.comments
end
end
答案 2 :(得分:0)
As DM documentation says,您可以使用#get!