从数据库中删除 utf8=✓
Removing utf8=✓ from Database
我有一个 API returns 直接来自数据库的信息,我注意到 Rails 正在存储一个 utf8 复选标记和真实性令牌。在保存之前删除它的最佳方法是什么?
{"achievements":[{"utf8":"✓","authenticity_token":"XDzrmNqNyt6OfhWpAzu3j7LhMd/sRcr/4oLsPxRMrDY=","achievement":"Big Guns",...
控制器代码示例:
def achievements
if params.include?(:ach)
@achievement = Achievement.new(params[:ach])
if @achievement.save
redirect_to action: :achievements and return
end
end
end
视图示例:
<%= form_tag '', multipart: true do %>
<div class="four columns">Name <input name="ach[achievement]" type="text" ></div>
<div class="five columns">Description <input name="ach[description]" type="text" ></div>
<% end %>
我不会尝试写一篇很长的文章 post,我只会记下 3 件可以让您朝着正确方向前进的事情。如果它令人困惑,请发表评论,我会进一步解释:
- 当您在 Rails 中使用表单助手时,
utf8=✓
被插入到您的 HTML 中。
- 您不应该将整个
params
对象交给您的模型。
- 您应该始终根据已知安全属性构建您的 JSON API 响应。
Dynamic fields 必须在配置中启用。
正如 coreyward 所提到的,在这种情况下,应该有选择地将参数添加到模型中。
这是最适合我的:
achievement_params = %w[achievement description]
@achievement = Achievement.new(params.select { |key,_| achievement_params.include? key })
您可以从参数哈希中删除密钥对,方法是在哈希 class.
中的 reject
方法中使用
示例:
hash.reject! {|k,_| k.to_s.eql?("utf8") || k.to_s.eql?("authenticity_token") }
我有一个 API returns 直接来自数据库的信息,我注意到 Rails 正在存储一个 utf8 复选标记和真实性令牌。在保存之前删除它的最佳方法是什么?
{"achievements":[{"utf8":"✓","authenticity_token":"XDzrmNqNyt6OfhWpAzu3j7LhMd/sRcr/4oLsPxRMrDY=","achievement":"Big Guns",...
控制器代码示例:
def achievements
if params.include?(:ach)
@achievement = Achievement.new(params[:ach])
if @achievement.save
redirect_to action: :achievements and return
end
end
end
视图示例:
<%= form_tag '', multipart: true do %>
<div class="four columns">Name <input name="ach[achievement]" type="text" ></div>
<div class="five columns">Description <input name="ach[description]" type="text" ></div>
<% end %>
我不会尝试写一篇很长的文章 post,我只会记下 3 件可以让您朝着正确方向前进的事情。如果它令人困惑,请发表评论,我会进一步解释:
- 当您在 Rails 中使用表单助手时,
utf8=✓
被插入到您的 HTML 中。 - 您不应该将整个
params
对象交给您的模型。 - 您应该始终根据已知安全属性构建您的 JSON API 响应。
Dynamic fields 必须在配置中启用。
正如 coreyward 所提到的,在这种情况下,应该有选择地将参数添加到模型中。
这是最适合我的:
achievement_params = %w[achievement description]
@achievement = Achievement.new(params.select { |key,_| achievement_params.include? key })
您可以从参数哈希中删除密钥对,方法是在哈希 class.
中的reject
方法中使用
示例:
hash.reject! {|k,_| k.to_s.eql?("utf8") || k.to_s.eql?("authenticity_token") }