Rails逻辑不会在“ false”结果上触发

时间:2018-10-17 07:15:38

标签: ruby-on-rails

将哈希数组作为API接收

@request['clients'].each do |client|

每个client属性上正在执行验证。但是,Rails逻辑无法针对错误的语句启动,并且忽略了它们。验证示例:

  def client_type_ok
    if @this_client['type'] == "ADT" || @this_client['type'] == "CHD"
      true
    else
      false
      @error_code_39 = true
    end
  end

控制器动作只希望在满足真实条件时执行:

if client_type_ok && client_type_ok

然而,尽管false,Rails.logger明确确认此条件正在通过。

Rails.logger.info !@this_client['type'].blank?
Rails.logger.info  @this_client['type']
Rails.logger.info "not"
Rails.logger.info  @this_client['type'] != "ADT"
Rails.logger.info "ADT"
Rails.logger.info @this_client['type'] == "ADT"

正在返回

true
APT
not
true
ADT
` `

底部被生成为空白。用p替换Rails.logger也会发生同样的情况。此操作的所有逻辑都忽略了错误的结果。尽管我可以尝试设计出完全真实的案例,但这是不方便且违反直觉的。

因此,似乎有一个meta函数妨碍了对错误案例的处理。如何追踪?可以逐步跟踪Rails.logger逻辑吗?

2 个答案:

答案 0 :(得分:3)

您不会在此处返回假

  def client_type_ok
    if @this_client['type'] == "ADT" || @this_client['type'] == "CHD"
      true
    else
      false # this is not doing anything. Simply ignored.
      @error_code_39 = true # result of this assignment will be true.
                            # and it also is the last expression of the if
                            # so it becomes the implicit return value of the method
    end
  end

答案 1 :(得分:1)

function mh_check_loggedin_redirect()
{
    if( is_page( 'cabinet' ) && ! is_user_logged_in() )
    {
        wp_redirect( home_url() );
        die;
    }
}
add_action( 'template_redirect', 'mh_check_loggedin_redirect' );

正如塞尔吉奥在上述答案中所提到的,对于else条件,yur方法的返回值将是正确的。您需要交换位置,或者可以重写上述方法

  def client_type_ok
    if @this_client['type'] == "ADT" || @this_client['type'] == "CHD"
      true
    else
      false
      @error_code_39 = true
    end
  end