2017-04-22 48 views
0

我需要为我的博客帖子呈现不同的展示页面。用红宝石在轨道上呈现不同的展示页面

我有3个不同的类别:主题,片段,项目。

每篇博文都必须与这三类相关。

如果有人点击帖子(假设相关类别是片段),它将显示在不同的节目中......等等。其他类别也是如此。

条件语句可能如何。

回答

0

我将与此开始,然后重构以避免重复

categories_controller.rb

def themes 
    #@posts = Post.where(category_id: 1) 
    ... 
    render layout: themes 
end 

def snippets 
    #@posts = Post.where(category_id: 2) 
    ... 
    render layout: snippets 
end 

def projects 
    #@posts = Post.where(category_id: 3) 
    ... 
    render layout: snippets 
end 
1

只是一个表演的方法,你可以有条件地呈现不同的看法和简单的呈现给你,你的作品可以使用下面的代码:

只需使用HTML文件名进行渲染,如果文件在同一控制器的视图中

if @post.theme? 
    render 'themes' 
elsif @post.snippet? 
    render 'snippets' 
else 
    render 'projects' 
end 
0

你可以做这样的事情:

型号/ post.rb

def category 
    @category ||= ... #returns category name 
end 

控制器/ post_controller.rb

def show 
    @post = Post.find(id) 
    @category = @post.category 
    ... 
end 

的意见/职位/ show.html.erb

... 
<%= render "types/#{@category}" %> 
... 

您也可以从控制器渲染指定的模板,如果你不具备的类别

0

您可以使用轨道部分来实现这个公共部分:

更多地了解局部参考Rails Partial

你可以创建部分为类别如下:

应用/视图/类别/ _themes.html.erb

应用/视图/类别/ _snippets.html.erb

应用/视图/类别/ _projects.html。ERB

在类别的节目页面,您可以如下

class CategoriesController < ApplicationController 
    ... 
    def show 
    ... 
    render params[:category] 
    end 
    ... 
end 

现在当你调用显示页面传递一个PARAM类别,它表示要显示

类的类型修改显示页面

如果你想显示类别片段,那么参数将是params [:category] ​​='snippets'这将查找部分内部类别视图。

2
you can make routes like: 

resources :posts, except:[:show] 
get 'posts/:id/cat/:category' , to:'posts#show', as: :show 

你必须创建对部分类别如下:

应用程序/视图/职位/ _themes.html.erb

应用程序/视图/职位/ _snippets.html。 ERB

应用程序/视图/职位/ _projects.html.erb

然后在控制器的显示动作。

controllers/posts_controller.rb 





def show 
    @post = Post.find(params[:id]) 
    @category = params[:category] 
    ... 
end 

然后在显示页面中呈现该类别。

的意见/职位/ show.html.erb

... 
<%= render '#{@category}'%>