在这个项目中我捅了,(我是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
答案 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
如果是nil
或false
,则会设置为新值。
This portion of the RoR tutorial是对||=
运算符的一个很好的解释。
@pguardino提出了一个很好的观点,即PHP程序员可能不熟悉这样一个事实,即如果ruby中的方法中没有明确的return
语句,它将返回最后一个非条件语句该方法作为返回值,所以是的,正在返回@task
。
RoR教程中有is another bit of text,它解释了为什么从方法返回时使用||=
运算符是有利的。它很有用,因为它意味着对task
方法的第一次调用将对数据库执行一个操作来检索任务,但是在同一个线程中对该方法的后续调用将返回@task
而不调用数据库(因为@task
变量已经设置。