Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 删除utf8=&x2713;从数据库_Ruby On Rails_Ruby_Forms_Mongoid - Fatal编程技术网

Ruby on rails 删除utf8=&x2713;从数据库

Ruby on rails 删除utf8=&x2713;从数据库,ruby-on-rails,ruby,forms,mongoid,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) @

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

名称
描述

我不想写一篇长篇大论,我只想指出三件事,它们会让你朝着正确的方向前进。如果令人困惑,请发表评论,我将进一步解释:

  • utf8=✓插入到HTML中
  • 您不应该将整个
    params
    对象交给您的模型
  • 您应该始终根据已知的安全属性构建JSON API响应 必须在配置中启用

    正如coreyward所提到的,在这种情况下,参数应该选择性地添加到模型中

    这是最适合我的结局:

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

    您可以通过在hash类中的
    reject
    方法中使用从params散列中删除密钥对

    例如:

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

    感谢您的回答,所以在保存时,我应该输入每个单独的参数,或者是否有方法检查没有保存额外的内容?我很困惑,因为模型中没有Authentity\u token字段。@Eddie我不知道您的代码在做什么,因为您没有在此处共享它。要控制传递给模型的内容:以及关于
    authenticity\u token
    的问题,请参阅:我添加了一些示例代码,但通过您的回答,您似乎已经理解了我在做什么。这个
    mongoid
    标记解释了很多问题我还没有测试过这一点,但它可能是一种更好的方法,可以做同样的事情:accurrence=accurrence.new accurrence.attributes=params