在一个动作中渲染不同的视图

我想在我的rails应用程序中为同一post提供两种视图。 例如 – 在登录用户可以更新和编辑post的一个用户中,任何用户都可以只查看它并对其进行评论或选择它。

我该怎么办呢? 我需要一个单独的课吗? 我知道我需要一个单独的视图,但模型和控制器怎么样?

1.case:您的视图将具有类似的内容,但只有已登录的用户才会有额外的选项,如编辑。

你应该使用局部视图,在主视图中你应该写这样的东西:

<% if signed_in? %> <%= render 'edit_form' %> <% end %> 

请记住,partial的名称应始终以下划线开头,因此在这种情况下,您的部分名称将被称为_edit_form.html.erb_edit_form.html.haml ,具体取决于您使用的内容。

2.case:根据用户是否已登录,您希望呈现完全不同的视图,然后您应该在控制器中处理它:

 def show if signed_in? render 'show_with_edit' else render 'show_without_edit` end end 

您的文件名为show_with_edit.html.erbshow_without_edit.html.erb

此外,如果您对已登录用户的视图显示为show则可以执行以下操作:

 def show render 'show_without_edit' unless signed_in? end 

3.case:如果你想基本上改变一切取决于用户是否已登录,你可以创建一些自定义方法并在原始操作中调用它们,如下所示:

 def show if singed_in? show_signed_in else show_not_signed_in end end private def show_signed_in # declaring some instance variables to use in the view.. render 'some_view' end def show_not_signed_in # declaring some other instance variables to use in the view.. render 'some_other_view' end