国家预期,得到字符串错误

时间:2011-04-19 12:34:23

标签: ruby-on-rails

我有2个型号“国家”和“联盟”,国家有很多联赛和联盟属于国家。添加联盟时,我有一个包含国家/地区的列表框,当提交表单时,实际发送国家/地区为:

{"commit"=>"Create League",
 "authenticity_token"=>"wuAuj5vowkk2R56TuFkWE8J3x3vue5RbnNPcbpjuG3Q=",
 "utf8"=>"✓",
 "league"=>{"league_short"=>"CL",
 "country"=>"England",
 "level"=>"2",
 "league"=>"The Championship"}}

但后来我收到此错误消息:

Country expected, got String

在Country模型中,我将country_id(整数)和country(字符串)作为字段,在League模型中,我将country作为字符串字段。在联盟控制器中,我有这个来输入下拉列表:@countries = Country.dropdown_list。在联盟/新视图中,我有这个选择字段:<%= f.select :country, @countries %>。出了什么问题?

6 个答案:

答案 0 :(得分:7)

我收到了这个错误:

Artist (#xxx) expected, got String (#xxx)

这就是我在Rails 3.0.x中修复它的方法:

class OtherModel
   belongs_to :artist

   validates :artist, :presence => true

   #...
end

<%= form_for_other.collection_select :artist_id, 
                                     Artist.all, :id, :name,
                                     :prompt => true %>

当我将collection_select输入的方法设置为外键而不是模型名称

时,它就起作用了

答案 1 :(得分:7)

您需要使用:country_id而不是:country

<%= f.select :country_id, Country.all.collect {|c| [c.name, c.id]} %>

答案 2 :(得分:5)

您需要在该请求中发送country_id(这是主键)而不是名称“England”。关系与主键相关联。

<%= f.select :country, Country.all.collect {|c| [ c.name, c.id ] } %>

答案 3 :(得分:1)

联盟模式应该通过其id(country_id)引用国家而不是字符串。

答案 4 :(得分:0)

遇到同样问题的其他人:

如果表单中有两个字段,则会导致此错误:

video: 'some string'
video['url']:  'some url'

然后rails将崩溃并出现错误:param的预期Hash(得到字符串)

解决方案非常简单:将“视频”更改为其他内容。 e.g:

video_origin_url: 'some string'
video['url']: 'some url'

答案 5 :(得分:0)

我收到了这个错误:

国家(#xxx)预期,得到字符串(#xxx) 这就是我在Rails 3.0.x中修复它的方法:

<%= f.collection_select :country_id, Country.all.collect,  :id, :name %>