什么是ruby功能呢

时间:2011-12-29 01:13:34

标签: ruby-on-rails ruby

在这个项目中我捅了,(我是PHP dev,而不是RoR),在模态上有这个函数。

  def task 
    @task ||= if search_key 
      Project.trop_fish.tasks.find(:first, :conditions => ["description like ?", "Search key: #{search_key}%"]) 
    else 
      Project.trop_fish.tasks.find(:first, :conditions => ["(name = ? OR name like ?)","#{task_name}","#{task_name} {%}"]) 
    end 
  end

所以它试图从名为trop_fish的项目中找到一项任务。 但最重要的是@task。

是吗,将if块的查找结果分配给@task?

相同
  def task 
    if search_key 
      @task = Project.trop_fish.tasks.find(:first, :conditions => ["description like ?", "Search key: #{search_key}%"]) 
    else 
      @task = Project.trop_fish.tasks.find(:first, :conditions => ["(name = ? OR name like ?)","#{task_name}","#{task_name} {%}"]) 
    end 
  end

1 个答案:

答案 0 :(得分:5)

几乎,不完全。与此相同:

def task 
  if search_key 
    @task ||= Project.trop_fish.tasks.find(:first, :conditions => ["description like ?", "Search key: #{search_key}%"]) 
  else 
    @task ||= Project.trop_fish.tasks.find(:first, :conditions => ["(name = ? OR name like ?)","#{task_name}","#{task_name} {%}"]) 
  end 
end

||=表示如果变量尚未设置为不同的值,则该变量将仅设置为新值。正如有些人评论指出/更简单地说,@task如果是nilfalse,则会设置为新值。

Michael Hartl的

This portion of the RoR tutorial是对||=运算符的一个很好的解释。

@pguardino提出了一个很好的观点,即PHP程序员可能不熟悉这样一个事实,即如果ruby中的方法中没有明确的return语句,它将返回最后一个非条件语句该方法作为返回值,所以是的,正在返回@task

RoR教程中有is another bit of text,它解释了为什么从方法返回时使用||=运算符是有利的。它很有用,因为它意味着对task方法的第一次调用将对数据库执行一个操作来检索任务,但是在同一个线程中对该方法的后续调用将返回@task而不调用数据库(因为@task变量已经设置。