在帮助者中测试所有权

时间:2013-10-21 14:42:50

标签: ruby-on-rails

我的观点中有这个块:

<% video.members.each do |p| %>
  <% if p.id == current_user.id %>
    <%= "paid" %>
  <% end %>
<% end %>

基本上,如果会员根据id是否匹配为视频付费,我正在努力解决。

这可能是一种非常糟糕的做法,我很乐意尝试不同的方法。

假设这是一个检查这个的好方法,我怎么能写一个类似的语句但是作为辅助方法?我试过了,但似乎你不能写相同的逻辑帮助器作为块只是吐出完整的数组而不是id,这意味着它不起作用。

1 个答案:

答案 0 :(得分:3)

你应该这样做:

<% if video.members.exists?(id: current_user.id) %>
  <%= 'Paid' %>
<% end %>

这将生成一个查询以测试视频是否已由current_user支付; - )


在帮手中:

# application_helper.rb
def display_paid_or_not(video)
  return '' if video.blank? # similar to .nil?
  video.members.exists?(id: current_user.id) ? 'Paid' : ''
end

# in view
<%= display_paid_or_not(video) %> 

希望这有帮助!