2012-01-15 181 views
9

我的工作就像应用程序中的博客,我 用户模块的has_many职位和岗位模块belongs_to的用户轨道控制器,混合嵌套和非嵌套资源

我要访问两个用户/:ID /职位和帖子/

routes.rb中是这样的:

resources :users do 
    resources :posts 
end 

resources:posts 

我怎么能知道帖子控制器内如果直接访问(/个),或通过嵌套的路线(/用户/:ID /帖子)?

例如,应该是什么职位控制器做正确的索引行动/用户/索引方法:ID /文和/职位

是有没有做这更好的办法?

回答

7

一种解决方案可能是您的控制器上过滤器之前使用,如:

before_filter :load_user 

def load_user 
    @user = User.find(params[:user_id]) if params[:user_id] 
    @posts = @user ? @user.posts : Post.scoped 
end 

然后,你需要重写你的控制器有点才能正常工作。

没有必要对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 

当然,您可以添加其他之前的过滤器,以删除重复的代码。

1

检查参数。

如果只是后你就得:id

如果用户/后你就会有用户ID为后。

所以检查params[:user] ...

注:如果没有用户,尝试params[:user_id]

对于index方法posts我认为这实际上是在两种情况下是相同的。什么会改变它在用户中的使用,关联和范围界定。