我正在开发一个类似博客的应用程序, 我的用户模块 has_many posts 和 posts 模块属于_to user
我想访问 users/:id/posts 和 posts/
routes.rb 是这样的:
resources :users do
resources :posts
end
resources:posts
我如何知道帖子 Controller 中是直接访问(/posts)还是通过嵌套路由(/user/:id/posts)访问?
例如,帖子 Controller 的索引方法应该是什么,以便为/users/:id/posts 和/posts 执行正确的 INDEX 操作
有更好的方法吗?
最佳答案
一种解决方案可能是在 Controller 上使用 before 过滤器,例如:
before_filter :load_user
def load_user
@user = User.find(params[:user_id]) if params[:user_id]
@posts = @user ? @user.posts : Post.all
end
然后你必须稍微重写你的 Controller 才能正常工作。
index
操作无需重构,@posts
已正确加载,但您可以根据需要进行进一步过滤
def index
@posts = @posts.where('updated_at < ?' Time.now)
end
然后更新每个成员操作:新建、创建、显示、编辑、更新、销毁并使用帖子作为基础,例如:
def new
@post = @posts.build
end
def create
@post = @posts.build(params[:task])
end
def show
@post = @posts.find(params[:id])
end
def edit
@post = @posts.find(params[:id])
end
def update
@post = @posts.find(params[:id])
end
def destroy
@post = @posts.find(params[:id])
end
当然,您可以在过滤器之前添加其他过滤器来删除重复的代码。
关于ruby-on-rails - 用于混合嵌套和非嵌套资源的 Rails Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8870452/