我有一个条件表单字段(通过单击复选框显示)我想用自定义方法验证。
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();
是我的尝试。这在技术上工作正常但也显示错误,即使我根本不输入任何数字(因为该字段不是强制性的)。我知道如何使用自定义方法进行检查,但前提是用户根本不提供任何数字。
由于
答案 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,或执行自定义验证器),但我希望我所指出的将帮助您实现正确决定如何进一步采取行动。
希望有所帮助!