【发布时间】:2016-10-01 17:32:09
【问题描述】:
我正在努力检查返回的枚举值。 在 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/dashboard_controller.rb 我有这个:
class DashboardsController < ApplicationController
def dashboard_1
@roles = current_user.roles
Role.select(:dashboard).where(user_id: current_user)
if
flash.now[:error] = "You can do whatever want!"
else
flash.now[:error] = "Only view!"
end
end
在控制台中我可以得到这个:
Role.select(:dashboard).where(:user_id => 1)
Role Load (0.3ms) SELECT "roles"."dashboard" FROM "roles" WHERE "roles"."user_id" = ? [["user_id", 1]]`=> #<ActiveRecord::Relation [#<Role id: nil, dashboard: "deleter">]>`
dashboard: "deleter" 是我想要的结果。 我想在控制器中检查仪表板的用户角色是否为“删除者”(flash.now 说“你可以随心所欲!”
请问您有什么建议吗?非常感谢!
更新
这是我的控制器/dashboard_controller.rb
def dashboard_1
@roles = current_user.roles
if @roles.any? { |role| role.deleter_dashboard? }
flash.now[:error] = "You are deleter!"
elsif @roles.any? { |role| role.viewer_dashboard? }
flash.now[:error] = "You are viewer!"
else
redirect_to users_path
end
end
在dashboard_1.html.erb 中,我尝试仅在用户是“仪表板”部分的“删除者”时才显示“新广告系列”按钮:
<% if @roles.deleter_dashboard? %>
<%= link_to new_campaign_path(@campaign), {method: 'get', class: 'btn btn-w-m btn-primary'} do %>New campaign
<% end %>
<% end %>
但是我不断收到此错误 - 未定义方法 deleter_dashboard?对于角色::ActiveRecord_Associations_CollectionProxy 如何让它正常工作?
【问题讨论】:
标签: ruby-on-rails ruby enums