Rails 5:具有条件和本地的局部视图

时间:2016-10-06 16:56:21

标签: ruby-on-rails ruby views partial-views locals

我在制作"新广告系列"时有点迷失。如果用户具有特定角色,则按钮。

在models / roles.rb中我有:

def dashboard_1 
@roles = current_user.roles
  if @roles.any? { |role| role.creater_dashboard? || role.deleter_dashboard? }
    flash.now[:error] = "You are creater/deleter!"
  elsif @roles.any? { |role| role.viewer_dashboard? }
    flash.now[:error] = "You are viewer!"
  else 
    redirect_to users_path
  end
end

在controllers / dashboards_controller.rb中我有:

<li>
<%= link_to new_campaign_path(@campaign), {method: 'get', class: 'btn btn-w-m btn-primary'} do %>New campaign
<% end %>
</li>

我有像这样的部分广告系列/ _new.html.erb:

<% if ... %>
<%= render partial: "campaigns/new" %>

并在dashboards / dashboard_1.html.erb中我需要渲染&#34;新广告系列&#34;如果用户是&#34; creater&#34; &#34;删除&#34;对于仪表板

<!-- Navigation -->
     <%= render 'layouts/navigation' %>

正如我发现它可以与当地人一起完成,但我无法弄清楚如何?非常感谢您的帮助!

在layouts / application.html.erb中我有:

<li class="<%= is_active_controller('dashboards') %>">
<% if @creator_deleter %>
   <%= link_to dashboard_path do %>
   <i class="fa fa-th-large"></i> <span class="nav-label" data-i18n="nav.dashboard">Dashboard</span>
   <% end %>
<% end %>
 </li>
... #other links to different parts of app

和部分_navigation.html.erb我有这个:

class PersonProfile : Profile
{
    protected override void Configure()
    {
        var map = Mapper.CreateMap<PersonType, PersonDto>();
        var mapback = Mapper.CreateMap<PersonDto, PersonType>();           
    }
}

如何隐藏&#34;仪表板&#34;如果用户不是@creator_deleter,则链接为部分?

1 个答案:

答案 0 :(得分:1)

据我所知,您无法使用控制器中的本地人渲染表单。你有什么理由想要使用本地的吗? - 这些通常在渲染partials以将局部变量从一个视图传递到partial时使用,以便重用。例如......

<%= render partial: 'form', locals: { my_local_var: my_local_var } %>

我认为你真正想要做的是在渲染过程中可以访问的控制器中设置一个实例变量。例如......

if @roles.any? { |role| role.creater_dashboard? || role.deleter_dashboard? }
  @creator_deleter = true
elsif @roles.any? { |role| role.viewer_dashboard? }
    @viewer = true
else 
  redirect_to users_path
end

然后您可以在视图中测试

<% if @creator_deleter %>