Gal*_*aim 9 ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1
我正在开发类似应用程序的博客,我的用户模块has_many帖子和posts模块belongs_to用户
我想访问两个用户/:id/posts和posts /
routes.rb是这样的:
resources :users do
resources :posts
end
resources:posts
Run Code Online (Sandbox Code Playgroud)
如果直接访问(/ posts)或通过嵌套路由(/ users /:id/posts),我怎么能在帖子控制器中知道?
例如,应该是posts控制器的索引方法,用于为/ users /:id/posts和/ posts执行正确的INDEX操作
有没有更好的方法来做到这一点?
一种解决方案可能是在控制器上使用前置过滤器,例如:
before_filter :load_user
def load_user
@user = User.find(params[:user_id]) if params[:user_id]
@posts = @user ? @user.posts : Post.scoped
end
Run Code Online (Sandbox Code Playgroud)
然后你必须重新调整你的控制器才能正常运行.
已经正确加载的index动作不需要重构@posts,但您可以根据需要进行进一步过滤
def index
@posts = @posts.where('updated_at < ?' Time.now)
end
Run Code Online (Sandbox Code Playgroud)
然后更新每个成员操作:新建,创建,显示,编辑,更新,销毁和使用帖子作为基础,如:
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
Run Code Online (Sandbox Code Playgroud)
当然,您可以添加其他过滤器之前删除重复的代码.