我需要为我的博客帖子呈现不同的展示页面。用红宝石在轨道上呈现不同的展示页面
我有3个不同的类别:主题,片段,项目。
每篇博文都必须与这三类相关。
如果有人点击帖子(假设相关类别是片段),它将显示在不同的节目中......等等。其他类别也是如此。
条件语句可能如何。
我需要为我的博客帖子呈现不同的展示页面。用红宝石在轨道上呈现不同的展示页面
我有3个不同的类别:主题,片段,项目。
每篇博文都必须与这三类相关。
如果有人点击帖子(假设相关类别是片段),它将显示在不同的节目中......等等。其他类别也是如此。
条件语句可能如何。
我将与此开始,然后重构以避免重复
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
只是一个表演的方法,你可以有条件地呈现不同的看法和简单的呈现给你,你的作品可以使用下面的代码:
只需使用HTML文件名进行渲染,如果文件在同一控制器的视图中
if @post.theme?
render 'themes'
elsif @post.snippet?
render 'snippets'
else
render 'projects'
end
你可以做这样的事情:
型号/ 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}" %>
...
您也可以从控制器渲染指定的模板,如果你不具备的类别
您可以使用轨道部分来实现这个公共部分:
更多地了解局部参考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'这将查找部分内部类别视图。
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}'%>