2012-02-03 55 views
0

我有一个用户注册并登录的rails项目。用户将创建“音乐”,所以我有一个“音乐”控制器,用户将填写一个标题,并上传他们的MP3。每个用户都可以做到这一点 - 这是很棒的。如何从其他控制器/表中将数据拖入一个列表?

当用户登录时,我希望他们在http://example.org/explore的良好列表视图中看到每个人上传的音乐。我将会在未来的这个“探索”页面的侧边栏的某个地方添加一些“自上次登录以来的最新增加内容”,以及其他一些功能。

我的问题是,我是否应该创建一个名为“Explore”的控制器,并使用类似以下内容的此列表的索引操作?

class ExploresController < ApplicationController 

    def index 
    @music = Music.all 
    end 

    def show 
    end 
end 

我想这可能是做正确的方式,但它似乎很奇怪,有“探索”控制器是使用所有你通常在“音乐”控制器见行动。音乐控制器将成为current_user的CRUD。

回答

1

您可以轻松地将music#index方法提供给所有人,并将用户验证放在CRUD方法上。这样,每个人都可以在/music页面上看到所有上传的音乐,但只有每个人的所有者才能更改它们。

如果用户需要一个简单的方法来查看使用他们自己的mp3列表,那么你可以使用嵌套的资源,所以它可以在/users/:id/music

如果您需要更多关于如何实现这些东西的信息,请发表评论。具体情况取决于您使用的认证系统(如果有)。

+0

我正在使用设计。我能不能用设计创建一个UsersController,并将所有用户特定的音乐信息放在那里,并委托音乐控制器来使用它,也就是将音乐列入系统中? – JeffC 2012-02-03 18:01:40

+0

你可以,但它不会真正符合Rails最佳实践。音乐控制器应该处理所有与音乐对象有关的CRUD操作,而不仅仅是列出它们。将它们放入UsersController似乎没有什么意义,仅仅因为它们需要登录用户。如果你正在使用Devise,那么只需要对某些方法进行身份验证非常简单,只需在MusicController的顶部放置'before_filter:authenticate_user !,:except =>:index'即可。 – 2012-02-03 18:12:16

+0

这就是我想要做的,我想我是第二次猜测自己,谢谢汤姆 – JeffC 2012-02-03 18:21:26

1

它看起来不像Rails方式。

使用相同的音乐控制器(如果它只是一个CRUD inherited_resources是你的选择)与has_scope宝石和管理用户访问cancan

这种方式,你有一个5lines MusicController并没有任何附加controlers

0

这是完全正常的一个“探索”操作添加到音乐控制器。

至于是否需要新的控制器,您想要的Explore页面与Music控制器的功能有何共同之处?他们可以分享部分和帮手吗?他们会使用相同的回调吗?

如果您唯一的计划是如图所示在新控制器中列出所有其他模型,那么我会说答案很简单:保留在音乐控制器中。

相关问题