1

我创建了一个小型的Twitter克隆的应用程序,用户发帖的,跟随其他用户,深受用户的他们遵循有所有职位的饲料。我添加了可供选择的帖子类别,包括“惊悚片”,“西部片”,“恐怖片”等等。的Rails 3:铁轨新受迷惑的路线/控制器

当用户登录时,根Web地址是自己的仪表板。

routes.rb 

root :to => "pages#home" 

和页面#家是用户的饲料位于:@feed_items = current_user.feed

PagesController 

def home 
    @title = "Home" 
    @featured_posts = Post.featured.limit(10) 
    if user_signed_in? 
     @user = current_user 
     @post = current_user.posts.build 
     @feed_items = current_user.feed.paginate(:per_page => "10", :page => params[:page]) 
    end 
end 

现在我想通了如何解析饲料,拉出一个子集料只包含与CATEGORY_ID帖子“2”(也称为“惊悚片”)

@thriller_feed_items= current_user.feed.where(:category_id => '2') 

当用户登录进入他们看到自己的仪表板和整个饲料root_path。我希望有一个链接说'惊悚片'会将当前整个@feed_items改成@thriller_feed_items,但我对路线和视图的工作方式感到困惑。 Twitter使用/!#/提到作为子集提要的地址,我是否需要做同样的事情?我将如何设置?

编辑:显示我的送纸方法是如何工作的。

用户模型

def feed 
    Post.from_users_followed_by(self) 
    end 

Post模型

def self.followed_by(user) 
     followed_ids = %(SELECT followed_id FROM relationships 
         WHERE follower_id = :user_id) 
     where("user_id IN (#{followed_ids}) OR user_id = :user_id", :user_id => user) 
    end 

回答

2

我假设在这一点上,这个控制器非RESTful。

编辑:我已经更新这也让一个类别名称。相应地调整路线和变量指数。

路线。RB

match "/category/:category" => "pages#home" 

页面#家

def home 
    @title = "Home" 
    @featured_posts = Post.featured.limit(10) 
    if user_signed_in? 
    @user = current_user 
    @post = current_user.posts.build 
    # BEGIN NEW 
    if params[:category] 
     # is :category an integer id? 
     if params[:category].to_i.to_s == params[:category] 
     @feed_items= current_user.feed.where(:category_id => params[:category]) 
     else 
     # assuming Category has_many :feeds 
     @feed_items= current_user.feed.includes(:category).where(
      ['`categories`.name = ?', params[:category]] 
     ) 
     end 
    else 
     @feed_items = current_user.feed 
    end 
    @feed_items = @feed_items.paginate(:per_page => "10", :page => params[:page]) 
    # END NEW 
    end 
end 

查看:

<%= link_to "Thriller Feed Items (by id)", "/category/2" %> 
<%= link_to "Thriller Feed Items (by name)", "/category/Thriller" %> 
+0

嗨,我真的很喜欢这个解决方案,但我怎么会得到的路线是“/类别/惊悚片”?再次感谢 –

1

那么你为什么不使用你的网页的控制器创建一个名为惊悚片新的控制器动作,和一个叫做页/ thriller.html新的看法。 ERB。

在你的routes.rb,然后你可以这样做:

get 'page/thriller' 

match 'thriller' => 'page#thriller' 

更一般地,你可以创建一个流派的行动,并通过体裁作为一个ID。

match 'genre/:genre_id' => 'page#genre' (you get the parameter with params[:genre_id]) 

而且阅读routing guide

+0

+1的推荐阅读。除了理解一些基础知识的工作方式外,知道如何嵌套资源并使用'耙路线'来获得优势将使生活更轻松。 – Tass