因为你是新手,让我给你一些想法。它 的 不会是具体的答案 强> ,但它应该有希望帮助你
的 楷模 强>
当你使用 Models 在Rails中,你需要确保你欣赏 功率 他们的工作方式
Models
Rails是一个 MVC(模型 - 视图 - 控制器) 框架:
这意味着每次调用数据(通过控制器),您的 Model 将构建一个“对象”,然后Rails可以使用它来输出 view 等等
Model
view
你遇到的直接问题是你没有使用你的模型构建对象 - 你只是用它来回收不同的数据。这是不好的。
-
的 面向对象 强>
就像Ruby一样 面向对象 ,这意味着你必须确保每次调用数据/运行控制器动作时,你实际上都是基于它们 对象
“对象”与“变量”类似,但同时不同。主要区别在于 宾语 包含比变量更多的数据(以JSON表示法),允许Rails等框架以各种方式处理对象
这很重要的原因是因为当您在控制器中调用以下代码时:
time=Time.now - params[:segmentation][:date_range].to_i.days #date range basi currentTime=Time.now if params[:segmentation][:first_event_count].blank? @segmentedUsers=Event.where(params[:segmentation][:first_event] + " > 0").pluck(:user_id) @segmentedUsers=Event.where(created_at: time .. currentTime) params[:segmentation][:user_count]=@segmentedUsers.count else @segmentedUsers=Event.where(params[:segmentation][:first_event] + " >" + params[:segmentation][:first_event_count] ).pluck(:user_id) params[:segmentation][:user_count]=@segmentedUsers.count end
你是什么 其实 正在努力建立一系列 对象 。问题是你的电话很糟糕。特别糟糕。
你最好做以下事情:
#app/models/event.rb Class Event < ActiveRecord::Base scope :first_event, ->(event) { where(" #{event} > 0").pluck(:user_id) } end #app/controllers/events_controller.rb Class EventsController < ApplicationController def your_action first_event = params[:segmentation][:first_event] @users = Event.first_event first_event end end
这将调用您需要的受尊重数据,同时提供更简洁的方式来管理呼叫。是的,我知道我已经跳过了很多你的逻辑 - 这太可怕了
的 控制器 强>
最后,你想做一些非常重要的事情
您想确保拥有正确的控制器设置。许多人遇到的问题是他们通常会尝试使控制器适合他们的流程 - 这里的问题是,即使发生这种情况,您也不会以最强大的方式创建应用程序。
由于Rails是面向对象的,因此您的控制器需要匹配您的对象创建和对象。组态。一个好的经验法则是只为你想要显示的特定对象创建控制器(在你的情况下) segmented_users )
segmented_users