我正在尝试在Rails中使用服务来减小控制器的大小。 我有一个事件模型,其中包含user_id字段。我想选择组织最多活动的前3名用户。这是第一次使用Services,有人告诉我强烈建议保持模型和控制器一样的瘦。
我的billboard_service.rb:
class BillboardService
attr_reader :user, :params, :event
def most_event_organized
Event.group(:user_id).order('count_all desc').count.first(3)
end
def event_find(user_id)
Event.where(user_id: user_id).includes(:user_id)
end
end
我的观点(非常早期)
<%= @bill_board.most_event_organized %>
我的控制器是由脚手架构建的。 我收到以下错误:
ActionView::Template::Error (undefined method `most_event_organized' for nil:NilClass):
1: <div class="line_separation_equilibree"></div>
2: <h3> league </h3>
3: <%= @bill_board.most_event_organized %>
4: <div class="col-lg-4">
5:
6: <br>
有人知道这应该如何工作吗? 谢谢
答案 0 :(得分:1)
您必须在调用方法
之前创建新的BillboardService对象。@bill_board = BillboardService.new()
@bill_board.most_event_organized