现在我的if语句看起来像这样:
angular.module('test', [])
.controller('myCtrl', function($scope, $sce){
$scope.char = $sce.trustAsHtml('ALK-Abelló A/S')
})
.directive('trustedHtml', ['$sce', function($sce) {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModel) {
ngModel.$formatters.push(function(value) {
function htmlDecode(input){
var elem = document.createElement('div');
elem.innerHTML = input;
return elem.childNodes.length === 0 ? '' : elem.childNodes[0].nodeValue;
}
return htmlDecode(value);
});
}
}
}])
因此,如果找到<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<!DOCTYPE html>
<html>
<head>
<script data-require="angular.js@1.4.8" data-semver="1.4.8" src="https://code.angularjs.org/1.4.8/angular.js"></script>
<link rel="stylesheet" href="style.css" />
<script src="script.js"></script>
</head>
<body ng-app="test">
<div ng-controller="myCtrl">
ALK-Abelló A/S <br>
<input trusted-html ng-model="char"/>
</div>
</body>
</html>
,请检查其if User.find(user[:id]).present? && User.find(user[:id]).status_id != nil
...
end
。之所以这样,是因为当我在无法找到的用户上检查status_id时,我不想抛出异常。但是想知道是否有更清洁的方法来做到这一点......
答案 0 :(得分:1)
.find如果找不到则抛出异常。
请改为尝试:
user = User.where(id: user[:id]).first
if user.present? && user.status_id != nil
...
end
答案 1 :(得分:0)
看起来你已经有了一个用户对象,所以直接使用它而不是再次查询数据库:
def download_image(url, filename, output_dir_name):
if not os.path.exists(output_dir_name):
os.makedirs(output_dir_name)
conn = urllib.request.urlopen(url)
output = open(os.path.join(output_dir_name, filename), 'wb') # binary flag needed for Windows
output.write(conn.read())
output.close()
答案 2 :(得分:0)
您可以使用专为此类情况设计的try
:
if User.find_by_id(user[:id]).try(:status_id) != nil
来自文档:
调用名称作为第一个参数的公共方法,就像
public_send
一样,除非接收者没有响应,否则调用返回nil而不是引发异常。此方法被定义为能够写
@person.try(:name)
而不是
@person.name if @person
我还将User.find
更改为User.find_by_id
,因为如果找不到记录(而不是引发异常),则返回nil
。
答案 3 :(得分:0)
Active Record文档说
find方法将引发ActiveRecord :: RecordNotFound异常 除非找到所有提供的主要的匹配记录 密钥。
看起来您可能想要第一种方法,因为它不会引发异常。