Ruby on rails 在使用params[:action]进行过滤或if检查之前,哪种方法有效?

Ruby on rails 在使用params[:action]进行过滤或if检查之前,哪种方法有效?,ruby-on-rails,Ruby On Rails,案例一和案例二哪个更有效 案例一: before_filter :validator, only: :test1 before_filter :parser, only: :test2 def test1 <some code> end def test2 <some code> end private def validator <condition1> end def parser <condition2

案例一和案例二哪个更有效

案例一:

before_filter :validator, only: :test1
before_filter :parser, only: :test2

def test1
  <some code>
end

def test2
  <some code>
end

private

  def validator
    <condition1>
  end

  def parser
    <condition2>
  end
before_filter:validator,only::test1
在过滤器之前:解析器,仅::test2
def测试1
结束
def测试2
结束
私有的
def验证器
结束
def解析器
结束
案例二:

before_filter :validator

def test1
  <some code>
end

def test2
  <some code>
end

private

  def validator
    if params[:action] == 'test1'
      <condition1>
    end

    if params[:action] == 'test2'
      <condition2>
    end
  end
before\u过滤器:验证程序
def测试1
结束
def测试2
结束
私有的
def验证器
如果参数[:操作]=“test1”
结束
如果参数[:操作]=“test2”
结束
结束

案例1效率更高,但不是因为它运行得更快。您可以肯定,但它们几乎肯定有非常相似的资源需求


#1更有效的原因是它减少了显影剂的压力。例如,它更明显地表达了你的意图。它可以更有机地增长,并且更容易为其编写测试。案例2增加的复杂性将使测试和长期维护更加困难,从而对项目产生负面影响。

从效率角度看,应该没有明显的差异。您应该关心的是可读性/可维护性。编写测试更容易吗?在这两种情况下,都是动作前的
。为这些人写测试很有趣:)是的,容易多了。在案例2中,为了测试验证器方法,必须建立更多的状态。总的来说,单独测试验证器和解析器方法将减少复杂的设置。单独测试这些方法就足够了,并验证在点击操作时是否调用了这些方法(如果需要)。这也提高了测试记录代码的能力。@SergioTulentsev在我写这个答案时,你似乎在评论中写了一个非常类似的观点……也许我应该说,编写信息丰富、具体且不太复杂的测试更容易……是的,我更同意这个版本的陈述:)