好的,我需要问一下如何将其移入控制器
- if UserGroup.where("group_id = ? AND user_id = ?", annoucement.group_id, current_user.id).exists? and annoucement.exp_date >= Date.today
这是我观点的一部分,我不知道如何将每个值传递给它
#Part of index.html.haml
- @annoucements.each do |annoucement|
- if UserGroup.where("group_id = ? AND user_id = ?", annoucement.group_id, current_user.id).exists? and annoucement.exp_date >= Date.today
%tr{id: "annoucement_#{annoucement.id}"}
%td= annoucement.title
%td= annoucement.description
答案 0 :(得分:2)
你绝对是在正确的轨道上。像这样的逻辑不属于视图,甚至可能不在控制器中。你想尽可能地将逻辑“反向”推入控制器,也可能推进到模型中。视图中的逻辑是代码气味:D
我相信你想要的是left_outer_join
。看起来UserGroup
是用户和组之间的连接表,对吧?如果是这种情况,则命名约定为UsersGroup
。我打算做这个假设。我的代码可能与你的代码不符,所以要适应口味。
这是使用Rails 5 left_outer_join
https://blog.bigbinary.com/2016/03/24/support-for-left-outer-joins-in-rails-5.html
但是在Rails 5之前可以使用joins
完成同样的事情
https://apidock.com/rails/ActiveRecord/QueryMethods/joins
Announcement.left_outer_joins(:users_groups).where(users_groups: { user_id: current_user.id }).uniq
这将获得具有用户组的所有公告,然后使用当前用户ID对其进行过滤。
您可以将它放在控制器中并将其分配给变量,或者您可以在模型中创建范围,或者在无数其他选项中创建范围。祝你好运!