Ожидается страна, получена строковая ошибка - PullRequest
5 голосов
/ 19 апреля 2011

У меня есть 2 модели "Страна" и "Лига", Страна имеет много лиг, и Лига принадлежит стране. При добавлении лиги у меня есть список со странами, и когда форма отправлена, фактическая страна отправляется:

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

Но тогда я получаю это сообщение об ошибке:

Country expected, got String

В модели "Страна" у меня есть country_id (целое число) и страна (строка) в качестве полей, в модели Лиги я имею страну как строковое поле. В контроллере Лиги у меня есть это, чтобы отразить выпадающий список: @countries = Country.dropdown_list. В лиге / новом виде у меня есть это поле выбора: <%= f.select :country, @countries %>. Что не так?

Ответы [ 6 ]

7 голосов
/ 01 мая 2013

Вам необходимо использовать: country_id вместо: country

<%= f.select :country_id, Country.all.collect {|c| [c.name, c.id]} %>
7 голосов
/ 10 мая 2011

Я получил эту ошибку:

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введите внешний ключ вместо названия модели

5 голосов
/ 19 апреля 2011

Вам нужно отправить country_id (который является первичным ключом) вместо имени 'England' в этом запросе.Отношения связаны с первичными ключами.

<%= f.select :country, Country.all.collect {|c| [ c.name, c.id ] } %>
1 голос
/ 30 января 2013

Модель Лиги должна ссылаться на страну по ее идентификатору (country_id), а не по строке.

0 голосов
/ 06 ноября 2013

Я получил эту ошибку:

Страна (#xxx) ожидается, получила строку (#xxx) Вот как я это исправил в Rails 3.0.x:

<%= f.collection_select :country_id, Country.all.collect,  :id, :name %>
0 голосов
/ 08 октября 2013

для тех, кто сталкивался с такой же проблемой:

эта ошибка возникает, когда в вашей форме два поля, например:

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

, тогда рельсы сбоят с ошибкой: ожидается хэш(получил String) для param

решение довольно простое: заменить «видео» на что-то другое.например:

video_origin_url: 'some string'
video['url']: 'some url'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...