如何有条件地呈现不同的节目模板

时间:2017-04-19 10:32:30

标签: ruby-on-rails

我有一个Post模型,帖子可以是视频帖子(带有YouTube链接)或文章帖子(带正文)。 有一个枚举post_type,用于确定帖子的类型。

在我的show.html.erb视图中,我想根据所显示的帖子类型显示不同的模板文件。

文章和视频的整个html.erb文件内容不同。

在我的控制器中,我希望能够检查帖子类型并相应地呈现不同的文件。

if @post.video?
    //render video show view `video_show.html.erb`
else
    // render article show view `article_show.html.erb`
end

我已经尝试render template: 'posts/video'呈现我创建的新posts/video.html.erb文件,但根本不起作用。

最好的方法是什么?我想遵循惯例而不是使用粗糙的部分和简单的if-else来在部分之间切换。

2 个答案:

答案 0 :(得分:1)

只需简单的渲染就可以使用,您可以使用下面的代码:

  

如果文件位于同一控制器的视图中,则使用HTML文件名进行渲染

if @post.video?
  render 'video_show'
else
  render 'artical_show'
end

答案 1 :(得分:0)

render仅使用相对文件名

if @post.video?
  # with a file name posts/video_show.html.erb
  render 'posts/video_show'
else
  # with a file name posts/article_show.html.erb
  render 'posts/article_show'
end