从数据库中删除 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 件可以让您朝着正确方向前进的事情。如果它令人困惑,请发表评论,我会进一步解释:

  1. 当您在 Rails 中使用表单助手时,utf8=✓ 被插入到您的 HTML 中。
  2. 您不应该将整个 params 对象交给您的模型。
  3. 您应该始终根据已知安全属性构建您的 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") }