从数据库中删除utf8 =✓

时间:2015-04-16 21:06:08

标签: ruby-on-rails ruby forms mongoid

我有一个直接从数据库返回信息的API,并注意到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 %>

3 个答案:

答案 0 :(得分:4)

我没有尝试写一篇长篇文章,而是注意3件事应该让你朝着正确的方向前进。如果它令人困惑,请发表评论并进一步解释:

  1. 在Rails中使用表单助手时,utf8=✓会插入到HTML中。
  2. 您不应将整个params对象交给您的模型。
  3. 您应始终从已知安全属性构建JSON API响应。

答案 1 :(得分:1)

您可以使用哈希类中的reject方法从params哈希中删除密钥对。

示例:

hash.reject! {|k,_| k.to_s.eql?("utf8") || k.to_s.eql?("authenticity_token") }

答案 2 :(得分:0)

必须在配置中启用

Dynamic fields

正如coreyward所提到的,在这种情况下,应该有选择地将params添加到模型中。

这就是最适合我的方式:

achievement_params = %w[achievement description]
@achievement = Achievement.new(params.select { |key,_| achievement_params.include? key })