正确使用类方法和实例

时间:2018-03-22 01:28:40

标签: ruby-on-rails ruby methods

我正试图通过承担这个小项目来挑战自己。我有2个表我想从中生成一个列表。我的观点有2个下拉菜单,其中一个用户电子邮件和The Seconds下拉列表包含所有周开始日期的列表...我需要生成一个包含User.email,Week周参数的所有周的列表。开始日期和批准的Week.status ......

我不相信我这样做是正确的,我之前没有做过类似的事情,所以请不要在这里摧毁我......

这是我的模特

      def self.approved_week(start_date,email)
        logger.debug(" LOOK LOOK ")
        user = User.where(:email => params[:email])
        start_date = Week.where(:start_date => params[:start_date])
        approved_week = Week.where(:status_id => 3)  
       end 

控制器

    #Choose Approved Timesheet to Reset
      def reset
        logger.debug("YOU ARE WATCHING: #{params.inspect}")
        @user = User.all
       @weeks = Week.all
        logger.debug("USER EMAIL: #{params[:email]}")
        logger.debug "USER START DATE #{params[:start_date]}"
        call approved_week here how???
     end 

或者我应该将我的周定义为Week.where(:status_id => 3,:start_date =>(params [:start_date])

。我迷失在这里试图以正确的方式生成视图。

1 个答案:

答案 0 :(得分:0)

嗨,欢迎来到Stack Overflow :) 是的 - 您应该一次使用所有必需的标准来定义周数。

user = User.where(:email => params[:email])
start_date = Week.where(:start_date => params[:start_date])
approved_week = Week.where(:status_id => 3) 

这有两周的时间,理论上你可以拿出两个星期的星期...但是在ruby中这样做比在单个查询中做得慢得多,例如:如你所说:

Week.where(:status_id => 3, :start_date => params[:start_date])

执行此操作的rails方法是在Week上创建几个范围,您可以在其中传递相关详细信息,然后在控制器中链接在一起

以下是定义范围的方法:

class Week < ActiveRecord::Base
  STATUS_APPROVED = 3
  ...
  scope :approved, ->() { where(:status_id => STATUS_APPROVED) }
  scope :starting_on, -> (start_date) { where(:start_date => start_date) }

然后你可以在控制器中使用这些:

  def reset
    logger.debug("YOU ARE WATCHING: #{params.inspect}")
    @user = User.where(:email => params[:email]).last
    @weeks = Week.approved.starting_on(params[:start_date]).all
 end