Ruby on rails “中的参数”;其中;声明中给出;“缺少结尾”;错误
我不确定我做错了什么。我试图将if语句合并到控制器的edit函数中。我不断收到一个错误,说我缺少一个结束语句,而我知道我没有。我想知道我是否应该在国际单项体育联合会之前做一个“做”的陈述?不过,我不确定这将如何起作用Ruby on rails “中的参数”;其中;声明中给出;“缺少结尾”;错误,ruby-on-rails,if-statement,controller,syntax-error,Ruby On Rails,If Statement,Controller,Syntax Error,我不确定我做错了什么。我试图将if语句合并到控制器的edit函数中。我不断收到一个错误,说我缺少一个结束语句,而我知道我没有。我想知道我是否应该在国际单项体育联合会之前做一个“做”的陈述?不过,我不确定这将如何起作用 class FiltersController < ApplicationController (.. other stuff ..) def edit @filter = Filter.first @project = Project.all
class FiltersController < ApplicationController
(.. other stuff ..)
def edit
@filter = Filter.first
@project = Project.all
if (@filter.date_to =! nil) && (@filter.date_from =! nil)
if (@filter.project =! nil)
@hourlogs = Hourlog.where([project_id: @filter.project], ["date >= ?" date_from], ["date <= ?" date_to])
elsif (@filter.project == nil)
@hourlogs = Hourlog.where(["date >= ?" date_from, "date <= ?" date_to])
end
elsif (@filter.project == nil)
@hourlogs = Hourlog.all
else
@hourlogs = Hourlog.all
end
end
(.. more stuff ..)
end
class FiltersController @hourlogs=Hourlog.where([project\u id:@filter.project],“date>=?”date\u from],“date=?”date\u from,“date=?”date\u from),“date=?”date的=!
应该是!=
where
部分应该是这样的
@hourlogs = Hourlog
.where(project_id: @filter.project.id)
.where(date: date_from...date_to)
在Ruby中,测试对象是否为nil时使用nil?
;在Rails中,测试用户输入时使用present?
和blank?
,因为它们也会拒绝空字符串
def edit
@filter = Filter.first
@project = Project.all
@hourlogs = Hourlog.all
if @filter.project.present?
@hourlogs = @hourlogs.where(project_id: @filter.project)
end
if @filter.date_to.present? && @filter.date_from.present?
@hourlogs = @hourlogs.where(date: @filter.date_to..@filter.date_from)
end
end
在Ruby中,not equals
操作符是!=
。不过,除非通常更喜欢使用,否则不要像在低级语言中那样将值与nil或true/false进行比较。相反,在对象本身上使用谓词方法-Ruby是一种完全面向对象的语言
由于.where
是加法,您可以从一个基本范围开始,通过重新分配变量向where子句添加更多条件
@hourlogs = Hourlog
.where(project_id: @filter.project.id)
.where(date: date_from...date_to)
def edit
@filter = Filter.first
@project = Project.all
@hourlogs = Hourlog.all
if @filter.project.present?
@hourlogs = @hourlogs.where(project_id: @filter.project)
end
if @filter.date_to.present? && @filter.date_from.present?
@hourlogs = @hourlogs.where(date: @filter.date_to..@filter.date_from)
end
end