Rails 5:有条件和当地人的局部视图
Rails 5: partial view with condition and locals
如果用户具有特定角色,我在创建 "New campaign" 按钮时有点迷茫。
在 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
我有部分 campaigns/_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 如果用户是 "creater" 或 "deleter" 的仪表板,我需要 呈现 "New campaign" 按钮:
<% 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,如何部分隐藏"dashboard" link?
据我所知,您无法使用控制器中的局部变量呈现表单。你有什么理由想使用本地的吗? - 这些通常在渲染部分时使用,以将局部变量从一个视图传递到部分,以便重用。例如...
<%= 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 %>
如果用户具有特定角色,我在创建 "New campaign" 按钮时有点迷茫。
在 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
我有部分 campaigns/_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 如果用户是 "creater" 或 "deleter" 的仪表板,我需要 呈现 "New campaign" 按钮:
<% 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,如何部分隐藏"dashboard" link?
据我所知,您无法使用控制器中的局部变量呈现表单。你有什么理由想使用本地的吗? - 这些通常在渲染部分时使用,以将局部变量从一个视图传递到部分,以便重用。例如...
<%= 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 %>