我有一系列视频,我以不同的方式展示。 如果我只是以一种方式显示它,我只想写
<% videos.each do |video| %>
<%= render video %>
<% end %>
这会加载我的_video.html.erb
部分,但有时我会根据我的视图加载不同的部分。
根据列出的页面,有多个视图呈现的“Rails方式”是什么?
因此,在我的主页上,我可以呈现_video.html.erb
,但在另一个页面上我可以呈现_video_list.html.erb
。现在我只是调用方法
<%= render 'videos/video_list' locals: video %>
但我觉得有更好的方式吗?我觉得如果我能写的话会很棒。
<%= render video, 'list' %>
有什么建议吗? 感谢
答案 0 :(得分:1)
要让同一模型根据某些条件呈现不同的模板,您可以在任何对象上实现to_partial_path
方法并在该对象上调用render:
def to_partial_path
if list?
"videos/list"
else
"videos"
end
end
答案 1 :(得分:0)
经过一番挖掘,看起来这是最好的方式
<%= render video, list: true %>
_video.html.erb
<% if local_assigns[:list] %>
#list view
<% elsif local_assigns[:select] %>
#select view
<% else %>
#default view
<% end %>
这实际上感觉非常好。如果没有人能提出可能更好的建议,我会在几天内将其标记为正确吗?
由于
答案 2 :(得分:0)
如果要渲染视频集合,可以使用
<%= render videos %>
而不是
<% videos.each do |video| %>
<%= render video %>
<% end %>
要从views/videos/_list.html.erb
中的其他文件呈现不同的部分views/videos
,您可以这样做:
<%= render 'list', video: @video %>
最后的哈希参数使@video
partial中的实例变量list
可用,是一个名为video
的局部变量。您可以从技术上直接访问@videos
部分中的list
,但如果您明确传入新变量,则更容易跟踪事物。
答案 3 :(得分:0)
现在我只是调用方法
<%= render 'videos/video_list' locals: video %>
那不应该工作。
它或者是:
<%= render 'videos/video_list', video: video %>
或:
<%= render partial: 'videos/video_list', locals: { video: video } %>
要么肯定比任何&#34;聪明的&#34;更加正确,明确,简单和有弹性。自动助手。