编辑:我需要从数据库中查看
boolean
true/false
,但是问题是,从数据库调用它时,它返回了string
。我的datatype
中的json_permissions
是json
。如我所读并由其他人建议,boolean
true/false
是有效的json,保存后已经保存为Hash
(这是正确的,因为在调试时它将具有{{1 }}格式,如下所示。
如果我在Hash
之前调试并查看我的参数表单数据,则它是这样的:
我这样解析(ActiveAdmin):
.to_json
编辑:我现在像这样保存资源(来自.to_json vs JSON.parse的解释:
member_action :update_permissions, method: :put do
resource.json_permissions = JSON.parse(params.to_json)
resource.save
redirect_to admin_group_path(resource)
end
在调试时,它已经是哈希:
binding.pry参数在member_action :update_permissions, method: :put do
resource.json_permissions = params.to_json
resource.save
redirect_to admin_group_path(resource)
end
之前
在.to_json
之后的控制台上,我可以看到它是.to_json
(有什么方法可以防止这种情况?)
stringi-fied
然后在我的[["json_permissions", "{\"utf8\":\"✓\",\"_method\":\"put\",\"authenticity_token\":\"kjRYKDQZAMCZPvw/jQZvh0pyCPJ11Q30zROdh8WVohI=\",\"view_accounts\":\"true\",\"view_admin\":\"true\",\"view_admin_users\":\"true\",\"add_edit_admin_users\":\"true\",\"view_groups\":\"true\",\"add_edit_groups\":\"true\",\"view_jobs\":\"true\",\"view_reports\":\"true\",,\"commit\":\"Update Group Permissions\",\"action\":\"update_permissions\",\"controller\":\"admin/groups\",\"id\":\"3\"}"], ["updated_at", "2018-11-09 05:28:19.859162"]]
中在Rails中查看:
show
编辑:我将代码更改为以下代码,以确保在
show do resource.json_permissions.each do |key, value| if value == "true" || value == "false" resource.json_permissions[key] = !!value end end resource.save render('admin/groups/show', { group: group}) end
之前在boolean
上重新分配true/false
model
。
save
保存之前在binding.pry上-在show do
resource.json_permissions.each do |key, value|
if value == "true"
resource.json_permissions[key] = true
elsif value == "false"
resource.json_permissions[key] = false
end
resource.save
end
binding.pry
render('admin/groups/show', { group: group})
end
之前的循环内,它现在更改为resource.save
:
boolean
在装订时,现在使用正确的#<Group id: 3, group_name: "Treasury", group_description: "Treasury Department", active: true, created_at: "2018-10-23 06:08:48", updated_at: "2018-11-09 05:28:19", created_by: "maria.mendoza@sci.ph", updated_by: "maria.mendoza@sci.ph", json_permissions: {"utf8"=>"✓", "_method"=>"put", "authenticity_token"=>"kjRYKDQZAMCZPvw/jQZvh0pyCPJ11Q30zROdh8WVohI=", "view_accounts"=>true, "view_bank_accounts"=>true, "add_edit_bank_accounts"=>true, "view_recipient_accounts"=>true,.... >
值再次尝试保存后resource/group
的内容。
不幸的是,使用boolean
运算符,然后再次将其保存为视图,
仍然在
double bang
上返回Hash
字符串值
在检查数据库时-确实仍然将其另存为字符串,所以现在不奇怪为什么保存后在调试中没有得到true/false
boolean
了。
true/false
在{
"add_edit_admin_users": "false",
"view_user_accounts": "false",
"view_reports": "false",
...
...
...
}
上有什么事要做,可以将其转换回save
吗?
我的表单在string
POST
编辑:显式重新分配
<%= simple_form_for([:admin, resource], url: update_permissions_admin_group_path(resource), method: :put) do |f| %> <div class="panel"> <div class="panel_contents"> <div class="attributes_table"> <ul class="tree" id="tree"> <li> <%= hidden_field_tag 'view_accounts', false %> <%= check_box_tag 'view_accounts', checked = true %> View Accounts <ul> <li> <%= hidden_field_tag 'view_bank_accounts', false %> <%= check_box_tag 'view_bank_accounts', checked = true %> View Bank Accounts </li> <li>
会导致TRICK:)
答案 0 :(得分:0)
!!string
将始终返回true
:
!!"false" # true
!!"true" # true
您可以将作业写为
resource.json_permissions[key][value] = ( value == "true" )
括号是可选的,但是它们增加了可读性。
答案 1 :(得分:0)
show do
resource.json_permissions.each do |key, value|
if value == "true"
resource.json_permissions[key] = true
elsif value == "false"
resource.json_permissions[key] = false
end
resource.save
end
binding.pry
render('admin/groups/show', { group: group})
end
像出于某种原因一样,将其显式转换为布尔值。即使在检查我的数据库时,true/false
仍保存为字符串。