Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails “中的参数”;其中;声明中给出;“缺少结尾”;错误_Ruby On Rails_If Statement_Controller_Syntax Error - Fatal编程技术网

Ruby on rails “中的参数”;其中;声明中给出;“缺少结尾”;错误

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

我不确定我做错了什么。我试图将if语句合并到控制器的edit函数中。我不断收到一个错误,说我缺少一个结束语句,而我知道我没有。我想知道我是否应该在国际单项体育联合会之前做一个“做”的陈述?不过,我不确定这将如何起作用

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