ruby-on-rails - "No explicit conversion of Symbol into String"用于 rails 4.0.1 中的新记录(仅限)

标签 ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 rspec

在我的 Rails 4 升级之后,尝试为我的任何 ActiveRecord 类创建一个新记录

No explicit conversion of Symbol into String

例如,这里是我的链接的links_params方法

def link_params
  params.require(:link)
  .permit(:url_address, :group_id, :alt_text, :version_number, 
  :position, :content_date, :verified_date) # This is line 157
end

# line 118 is: @link = Link.new(link_params)

但是我明白了

TypeError (no implicit conversion of Symbol into String):
  app/controllers/links_controller.rb:157:in `link_params'
  app/controllers/links_controller.rb:118:in `create'

This error occurred while loading the following files:
link

Parameters:

{"utf8"=>"✓",
 "authenticity_token"=>"0FqFTx2EjCIO+R+rm97lF15+id4b452n+dBuUNxAL9U=",
 "link"=>{"url_address"=>"http://www.google.com",
 "alt_text"=>"",
 "version_number"=>"",
 "group_id"=>"49",
 "content_date"=>"08/18/2014"},
 "commit"=>"Save"}

最佳答案

我不确定它是怎么发生的,但看起来您的 params 对象只是一个散列...而不是 ActionController::Parameters 对象。当 params 只是一个散列时:

params = {"utf8"=>"✓", "authenticity_token"=>"0FqFTx2EjCIO+R+rm97lF15+id4b452n+dBuUNxAL9U=", "link"=>{"url_address"=>"http://www.google.com", "alt_text"=>"", "version_number"=>"", "group_id"=>"49", "content_date"=>"08/18/2014"}, "commit"=>"Save"}

params.require(:link)
=> TypeError: no implicit conversion of Symbol into String

params.class
=> Hash

但是如果它是一个 ActionController::Parameters 对象

params2 = ActionController::Parameters.new({"utf8"=>"✓", "authenticity_token"=>"0FqFTx2EjCIO+R+rm97lF15+id4b452n+dBuUNxAL9U=", "link"=>{"url_address"=>"http://www.google.com", "alt_text"=>"", "version_number"=>"", "group_id"=>"49", "content_date"=>"08/18/2014"}, "commit"=>"Save"})

params2.require(:link)
=>{"url_address"=>"http://www.google.com", "alt_text"=>"", "version_number"=>"", "group_id"=>"49", "content_date"=>"08/18/2014"} 

params2.class
=>ActionController::Parameters

您是否在 link_params 掌握它之前对 params 做了一些事情?

编辑: 根据API Docs , Strong params 仅在 Rails 4.0.2 中可用。如果您使用的是早期版本,则必须坚持使用 Rails 3 attr_accessible

关于ruby-on-rails - "No explicit conversion of Symbol into String"用于 rails 4.0.1 中的新记录(仅限),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25374559/

相关文章:

ruby-on-rails - 如何在 Rails 中存储嵌套的 json 数据?

ruby-on-rails-3 - 仅当用户登录时显示编辑用户链接

ruby-on-rails - 用户在 Rails 中更新键/值集合的 View 和表单

ruby-on-rails - 如何在 Rails 中创建具有外键别名的固定装置?

ruby-on-rails - 运算符不存在 : character varying[]

css - 检测 css 文件和 ruby​​ on rails 中的语法错误。无效的 CSS

ruby-on-rails - .rb 文件中的 Ruby 类

ruby-on-rails - Rails - 自动创建关联模型

ruby - FactoryGirl create_list 传入多个值

ruby - 我如何获得浅绿色的 ansi 代码并为 ruby​​ 获得更大的字体?