2017-04-22 27 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}'%>