基本上我想看看用户是否添加了任何blacklist_users或whitelist_users,然后根据它允许或禁止它们,但我无法正确地找出代码:(us_id基本上是user_id)
关系: Blacklist_user模型:
belongs_to :b_page
Whitelist_user模型:
belongs_to :b_page
B_page模型:
has_many :whitelist_user
has_many :blacklist_user
控制器:
if !(@b_page.whitelist_user.empty?)
@whitelist_users = @b_page.whitelist_user.map(&:us_id)
@whitelist_users.push(@b_page.user.id)
else
@whitelist_users = []
end
if !(@b_page.blacklist_user.empty?)
@blacklist_users = @b_page.blacklist_user.map(&:us_id)
else
@b_page.blacklist_user = []
@blacklist_users = @b_page.blacklist_user.map(&:us_id)
end
的观点:
<% if ((!(@whitelist_users.empty?)) && @whitelist_users.include?(current_user.id)) || ((!(@blacklist_users.empty?)) && @blacklist_users.exclude?(current_user.id)) %>
<!-- show bpage -->
<% elsif ! ((!((@whitelist_users.empty?)) && @whitelist_users.include?(current_user.id)) || ((!(@blacklist_users.empty?)) && @blacklist_users.exclude?(current_user.id)))%>
<!-- user not allowed-->
<% else %>
<!-- show bpage-->
<% end %>
但是当我以@ b_page.user身份登录时,我得到了(顺便说一下,我使用了设计) 是否有更好的方法来实现这一点,而不是使其复杂化
答案 0 :(得分:0)
如果它们是单独的型号,那么您可以在控制器操作中执行此操作。 Devise附带了一个方法user_signed_in ?,它将告诉您用户是否已登录。在你的情况下:
blacklist_user_signed_in?
whitelist_user_signed_in?
然后在您的控制器操作中显示页面:
if blacklist_user_signed_in?
return redirect_to root_path,
notice: 'You are not alllowed to access this part of the site'
end
这假设您的模型名为blacklist_user和whitelist_user。如果他们只是拥有属性并且是相同的模型,您可以这样做:
current_user.blacklisted?
并在您的用户模型中
def blacklisted?
blacklist
end
再一次假设您的“用户”模型中有一个名为“黑名单”的属性。