【问题标题】:Rails 5: partial view with condition and localsRails 5:条件和本地人的局部视图
【发布时间】:2016-10-06 16:56:20
【问题描述】:

如果用户具有特定角色,我在创建“新广告系列”按钮时有点迷失。

在 models/roles.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

在 controllers/dashboards_controller.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

我有部分活动/_new.html.erb 像这样:

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

如果用户是仪表板“删除者”的“创建者”,我需要在dashboards/dashboard_1.html.erb 中呈现“新活动”按钮

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

我发现它可以与当地人一起完成,但我不知道怎么做?非常感谢您的帮助!

已添加

在 layouts/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,如何部分隐藏“仪表板”链接?

【问题讨论】:

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


    【解决方案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 %>
    

    【讨论】:

    • 是的,你是绝对正确的,谢谢你的解决方案!我没有意识到我应该做@creator_deleter = true的事情:)
    • 拜托,你能检查我上面添加的代码,我有部分 _navigation.html.erb 吗?如果用户不是 @creator_deleter,如何使 link_to 仪表板隐藏?非常感谢您的帮助!
    • 只是不渲染它,即
    • 可能我没说对。我在导航栏中有几个链接,即 _navigation.html.erb 如果用户不是@creator_deleter,它不应该看到仪表板链接。我在想必须有某种方法来不渲染部分的特定部分。还是我错了?部分文件中的&lt;% if @creator_deleter %&gt; 不起作用。
    • 如果我理解正确,链接的呈现是基于@creater_deleter 标志的条件。我的建议在哪些方面没有给你呢?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多