我正试图通过承担这个小项目来挑战自己。我有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])
。我迷失在这里试图以正确的方式生成视图。
答案 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