2016-10-06 5 views
0

ユーザーが特定の役割を果たす場合は、「新しいキャンペーン」ボタンの作成に少し迷っています。私が持っているモデル/ roles.rbでRails 5:条件と地方の部分図

:私が持っているコントローラ/ dashboards_controller.rbで

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 

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 

私はこのような部分的なキャンペーン/ _new.html.erbがあります

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

ダッシュボード/ dashboard_1.html.erb私は「新しいキャンペーン」ボタンをレンダリングする必要があります。ユーザーがダッシュボードのための「デリータ」の「クリエイター」である場合:

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

私はそれが地元の人々で行うことができますがわかってきたように、しかし、私はどのように把握することはできませんか?助けてくれてありがとう!レイアウト/ application.html.erbで

を追加しました

私はこれがあります。

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

を、部分_navigation.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 

をユーザーが@creator_deleterでない場合、「ダッシュボード」リンクを部分的に非表示にするには?

答えて

1

私が知っている限り、コントローラから地元の人々にフォームをレンダリングすることはできません。あなたは地元の人を使う理由がありますか? - これらは通常、再利用のために部分変数をレンダリングして1つのビューから部分変数にローカル変数を渡すときに使用されます。例えば...

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

はい、あなたが絶対に正しいとソリューションをありがとうございましたで、そのためにテストすることができます!私は '@creator_deleter = true'ということをしなければならないと気づいていません:) – matiss

+0

私は部分的に_navigation.html.erbを持っています。ユーザーが@creator_deleterでない場合、link_toダッシュボードを非表示にするにはどうすればよいですか?助けてくれてありがとう! – matiss

+0

は単純にレンダリングしません。<%if @creater_deleter%><%= link_to ....%><% end %> – David

関連する問題