`
wiisola
  • 浏览: 87370 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

#005_使用with_scope

阅读更多
接着004中的例子,004中我们希望找出所有未完成的任务,好吧,我承认,我半途而废的事实在是太多了,也许有几百个上千个,谁知道呢,一张A4纸肯定打不下,也许我应该先列出前20条,一条一条解决以后再去考虑后面的?

事实就是这样,我要列出找到的前20条,并且距现在最近的事排在前面最先解决,更加以前的事就算忘了对现在的我也没什么影响。于是按照前面的方法,我们会这样说
Task.find_all_by_complete(false, :limit => 20)

进一步的,我们照004中的办法把find移入model,并且使用了with_scope,我们仍然能往find_incomplete里传入hash参数,这真是了不得。
# model/task.rb   
belongs_to :project   
  
def self.find_incomplete(options = {})   
  with_scope :find => options do  
    find_all_by_complete(false, :order => 'created_at DESC')   
  end       
end    

# task_controller.rb  
def index   
  @tasks = Task.find_incomplete :limit => 20  
end     

# project_controller.rb 
def show
  @project = Project.find(params[:id])
  @tasks = @project.tasks.find_incomplete :limit => 20  
end

非常好,这样我们便能DRY and more powerful了。这时候上司过来了,狠狠的训了我们一顿,说什么要是谁还留着一个礼拜之前的工作没完成,今天晚上就通宵加班。我很清楚的记得我确实留着几个上个礼拜的任务,也许我应该按时间顺序排出来看看到底是哪些没完成,我可不想加班,我想应该别人也不想。
def index   
  @tasks = Task.find_incomplete(:limit => 20, :order => 'created_at')
end  

遗憾的是,系统没能告诉我我应该去完成哪些该死的任务。之后看了hideto前辈的文章,我知道了,我们不能在调用find_incomplete时指定: order条件来覆盖该方法定义时默认的:order条件,那能不能改进一下我们的find_incomplete方法来解决这个问题呢?
很简单,我们可以将额外的参数merge进来:
# model/task.rb
def self.find_incomplete(options = {})
  find_all_by_complete(false, {:order => 'created_at DESC'}.merge(options))
end

或者使用ActiveSupport对Hash的扩展方法reverse_merge:
# model/task.rb
def self.find_incomplete(options = {})
  find_all_by_complete(false, options.reverse_merge(:order => 'created_at DESC'))
end

好吧,找到了任务就拼命去完成吧。
分享到:
评论

相关推荐

    Python库 | scope_injected_contextmanager-0.0.2.tar.gz

    当使用`with`关键字时,Python会自动调用对象的`__enter__()`方法开始一个上下文,然后执行`with`语句块中的代码,最后在退出时调用`__exit__()`方法,确保资源被正确释放,即使在执行过程中发生异常。 `scope_...

    Getting Started with NI-SCOPE

    NI-SCOPE是National Instruments开发的一款高速数字化仪器驱动程序,旨在帮助用户快速掌握NI-SCOPE的使用方法。下面是NI-SCOPE入门指南的知识点总结: 一、Instrument Driver是什么? Instrument Driver是控制可...

    IC_hspice_scope.zip

    HSPICE(High-Speed SPICE)是业界广泛使用的集成电路仿真工具,以其高效、精确和强大的功能著称。"IC_hspice_scope.zip"这个压缩包显然包含了与HSPICE仿真相关的源码和工具,为我们提供了一次深入理解HSPICE仿真的...

    96.tf.Variable和 tf.get_variable()1

    with tf.variable_scope("scope1", reuse=True): w_1_reused = tf.get_variable(name="w_1", initializer=2) # 正确,复用变量w_1 ``` 在上面的例子中,第二次进入`scope1`作用域并尝试创建`w_1`时,由于设置了`...

    5-3tensorboard 网络运行

    with tf.name_scope('summaries'): mean=tf.reduce_mean(var) tf.summary.scalar('mean',mean)#平均值 with tf.name_scope('stddev'): stddev=tf.sqrt(tf.reduce_mean(tf.square(var-mean))) tf.summary....

    doc_cpm_Time_scope.rar_SIMULINK cpm_Time_cpm_cpm matlab

    simulink model for CPM with time display ( needs to be corrected )

    11g_plsql_user_guide_and_reference.pdf

    Dynamic SQL has been improved with new features that make it easier to work with dynamic queries. Developers can now create more flexible and powerful queries on the fly. These enhancements include ...

    Checking_Intent-based_Communication_in_Android_With_Intent_Space

    本文将深入探讨Intent-based Communication在Android中的安全检查,特别是通过Intent Scope工具进行的分析。 Intent Filter和Intent Firewall是Android系统内置的两个关键安全模块。Intent Filter用于定义一个应用...

    将simulink的Scope波形数据保存到workspace.doc

    在 Simulink 中,我们经常使用示波器 Scope 来观察波形,但是如果我们要保存波形时,就最好别直接拷贝 Scope 波形了,因为它的背景是黑的,而且不能进行线形修改和标注,不适合作为文档用图。一般的做法是将数据输出...

    Simulink仿真波形的输出及绘制技巧——利用Scope

    為了使用 Scope 輸出數據,需要對 Scope 進行設定。設定界面如下:我們需要把 Limit data points to last 勾掉,因為很有可能您的數據會超過 5000 個。勾選 Save data to Workspace,變數類型可以選擇結構體,結構體...

    百度智能云人脸识别Demo在AndroidStudio3.2中的修改.docx

    #### 错误一:Notoolchains found in the NDK toolchains folder for ABI with prefix: mips64el-linux-android **问题描述**:在尝试构建项目时,会遇到“Notoolchains found in the NDK toolchains folder for ...

    unrxlib_275_u_1_0_13

    1/ Update all packages in unit scope. 2/ Change namespace in RxViewer unit for XE2. _______________________________________________________________________________ Update 1.06 1/ repair malfunction ...

    改进的鲸鱼优化算法IWOA

    with tf.variable_scope("BILSTM"): rnn_cellforword = tf.nn.rnn_cell.MultiRNNCell([tf.nn.rnn_cell.LSTMCell(hidden_nodes0), tf.nn.rnn_cell.LSTMCell(hidden_nodes0)]) rnn_cellbackword = tf.nn.rnn_cell....

    tensorflow一步一步实现一个线性回归预测模型

    with tf.variable_scope(data): # 1.准备数据, x 特征值 [100,1] y 目标值[100] # 指定均值为0.75 方差为0.5 x = tf.random_normal([100, 1], mean=0.75, stddev=0.5, name=x_data) # 真实值 y = 0.7 * x + 0.8...

    delphixe10 RxLib_For_RX10插件

    1/ Update all packages in unit scope. 2/ Change namespace in RxViewer unit for XE2. _______________________________________________________________________________ Update 1.06 1/ repair malfunction ...

    JSF 如何傳遞物件 在不同頁面 不同controller in request scope1

    本文将详细介绍如何在不使用Session Scope的情况下,通过Flash Scope在A页面和B页面之间的不同控制器(A_Controller和B_Controller)传递对象。 首先,了解几个基本概念: 1. Request Scope:在用户单次请求内有效...

    Cooperative Controlled of Robot Arms with RealTime Observer:这是主从单元之间分布式协作同步的设计,具有鲁棒的观察器。-matlab开发

    我们将在不久的将来看到 IR 4.0 的出现,多个相互连接的机械臂被用来执行协作任务。 多机械臂在可操作性和自动化效率方面优于单个机械臂。... dcmotorJoint1_2_3_MnS_with_scope_slave2controlDone_

    SpotifyAPI_with_python:使用Spotify API检索信息

    这个`SpotifyAPI_with_python-master`压缩包可能包含了一个示例项目,展示了如何实际运用上述概念。你可以通过解压并运行其中的Python脚本来实践这些操作。学习和理解如何与Spotify API交互,不仅可以帮助你创建有趣...

    RX Lib_For D5~XE2 XE3

    1/ Update all packages in unit scope. 2/ Change namespace in RxViewer unit for XE2. _______________________________________________________________________________ Update 1.06 1/ repair malfunction ...

    matlab 中如何用scope保存图片.docx

    在使用 Scope 显示波形时,默认的背景颜色是黑色的,且没有截图功能。然而,通过一些设置和技巧,我们可以轻松地将 Scope 中的图像保存为图片。 设置 Scope 的背景颜色 -------------------- 首先,需要在 Matlab ...

Global site tag (gtag.js) - Google Analytics