2016-10-07 1 views
0

I meine App Ich muss Links zu Abschnitten je nach Benutzerrolle ein-/ausblenden.Rails 5: Link aus Navigation teilweise anzeigen, wenn Benutzer eine bestimmte Rolle hat

In models/roles.rb ich habe:

class Role < ApplicationRecord 
    belongs_to :user, optional: true 
    accepts_nested_attributes_for :user 

    enum general: { seller: 1, buyer: 2, seller_buyer: 3}, _suffix: true 
    enum dashboard: { denied: 0, viewer: 1, editer: 2, creater: 3, deleter: 4}, _suffix: true 

In Controller/dashboards_controller.rb ich habe:

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

In Layouts/application.html.erb Ich habe dies:

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

und in Teil Layouts/_navigation.html.erb Ich habe dies:

<li class="<%= is_active_controller('dashboards') %>"> 
    <%= 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> 

<li class="<%= is_active_controller('campaigns') %>"> 
    <%= link_to campaigns_path do %> 
    <i class="fa fa-clipboard"></i> <span class="nav-label" data-i18n="nav.campaigns">Campaigns</span> 
    <% end %> 
</li> 
... #other links to different parts of app 

Wie "Armaturenbrett" -Link in teilweise zeigen, wenn der Benutzer @creator_deleter ist? Hinweis: Ich muss jedoch den Link "Kampagnen" für alle Nutzer anzeigen. Wie ich herausgefunden habe, könnte ich AJAX von diesem Punkt an verwenden ... Vielen Dank für jede Hilfe!

Antwort

0

Wahrscheinlich müssen Sie die @creator_deleter Instanzvariable als lokale in die partielle übergeben.

<!-- Navigation --> 
    <%= render 'layouts/navigation', locals: { creator_deleter: @creator_deleter } %> 

Dann in Ihrem Teil können Sie überprüfen, denn es

<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> 
+0

Leider funktioniert nicht wie in _layouts/_navigation.html.erb_ gibt diesen Fehler: _undefined lokale Variable oder Methode 'creator_deleter'_ Es scheint, dass Instanzvariable wird auf diese Weise nicht auf Teilweise übergeben. – matiss

Verwandte Themen