只有在提供任何值时,Rails才会使用自定义方法形成验证

时间:2016-01-07 12:01:16

标签: ruby-on-rails ruby validation

我有一个条件表单字段(通过单击复选框显示)我想用自定义方法验证。

public Dialog onCreateDialog(Bundle SaveInstanceState){ 

return new AlertDialog.Builder(new ContextThemeWrapper(getActivity(), android.R.style.Theme_Dialog)).setMessage("Alert Dialog").setPositiveButton("Set", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(getContext(), "Positive", Toast.LENGTH_SHORT).show();
    }
}).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        Toast.makeText(getContext(), "Negative", Toast.LENGTH_SHORT).show();
    }
}).show();

是我的尝试。这在技术上工作正常但也显示错误,即使我根本不输入任何数字(因为该字段不是强制性的)。我知道如何使用自定义方法进行检查,但前提是用户根本不提供任何数字。

由于

2 个答案:

答案 0 :(得分:2)

您可以使用validate代替isDisplayed作为自定义验证程序,然后在验证程序方法中存在数字时移动检查:

validates

答案 1 :(得分:0)

您在代码中混合了两件事,所以让我帮助您更好地了解正在发生的事情。

1)。条件验证:

validates :number, length: { maximum: 20 }, if: :checksum_is_valid?

通过这个,Rails希望模型实现方法checksum_is_valid?,它返回布尔值,并根据它执行此验证。类似的东西会起作用:

def checksum_is_valid?
  Luhn.valid?(number)
end

如果此方法返回true,Rails将执行:number的验证不超过20

2)。自定义验证:

使用此自定义方法时,您可以构建自己的验证逻辑和错误。所以,如果你有方法:

def checksum_is_valid?
  if !Luhn.valid?(number)
    errors.add(number, "is not valid.")
  end
end

您应该使用以下命令配置验证器:

validate :checksum_valid?

不幸的是,从您的代码中不清楚您想要实现的目标(验证数量不超过20,或执行自定义验证器),但我希望我所指出的将帮助您实现正确决定如何进一步采取行动。

希望有所帮助!