Rails 4: ожидается исключение сайта (# 70058148983820), есть строка (# 8388700) - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть форма с полем выбора, которые позволяют выбирать значения разностей.Когда я хочу сохранить форму, у меня возникает исключение:

ActiveRecord::AssociationTypeMismatch at xxxxxxxxxxxxxxxxxxxxx
Site(#70058148983820) expected, got String(#8388700)

Вот форма, которая генерирует поле выбора

col-md-9
  .input-group.btn-group
    %span.input-group-addon
    =t('activerecord.attributes.user.volunteer_wishes_sites')
    = f.collection_select :wishes_sites, @sites, :id, :name, {:selected => @user.wishes_sites.map(&:id)}, {:multiple => true, :class=>"sites_multiselect"}

В моем контроллере у меня есть

def user_params
  params.require(:user).permit(
    :wishes_sites =>[],
  )
end

Модель

class User < ActiveRecord::Base
  ....
  has_and_belongs_to_many :wishes_sites, :class_name => "Site", :join_table => :wishes_sites
end

Вот строка, которая вызывает ошибку

if @user.update_attributes(user_params)

Вот миграция

create_table :sites, force: true do |t|
  t.string   "name"
  t.datetime "created_at"
  t.datetime "updated_at"
  t.text     "address"
  t.text     "description"
end

create_table :wishes_sites, id: false, force: true do |t|
  t.integer "user_id"
  t.integer "site_id"
end

Вотжурнал перед исключением:

Processing by Backoffice::UsersController#update_volunteer as HTML
Parameters: {"utf8"=>"✓", "authenticity_token"=>"xxxxxxxxxxxxxxxxxxxxx=", "user"=>{"volunteer_driving_b"=>"1", "volunteer_driving_a"=>"1", "volunteer_driving_d"=>"1", "volunteer_driving_license_number"=>"123456", "volunteer_owns_car"=>"1", "volunteer_owns_motorcycle"=>"1", "volunteer_owns_tramway_card"=>"1", "volunteer_owns_bicycle"=>"1", "spoken_languages"=>["", "2", "3", "4", "5", "6", "36"], "volunteer_aid_certificate"=>"bouche à bouche", "wishes_sites"=>["", "1", "2"], "wishes_position_categories"=>["", "1"], "sports_association"=>"true", "sports_association_comment"=>"Les petit chanteurs à la croix", "experienced"=>"true", "experienced_comment"=>"1999 Ramasseur de papiers", "kept_tshirt"=>"true", "volunteer_remark"=>"Aucun car je suis ok sur tout", "accept_volunteer_list"=>"0", "accept_volunteer_rules"=>"1", "volunteer_checked"=>"0", "compensation"=>"empty2", "volunteer_comment"=>""}, "spoken_languages_levels"=>{"2"=>"basic", "3"=>"intermediate", "4"=>"fluent", "5"=>"fluent", "6"=>"intermediate", "36"=>"basic"}, "availability"=>["49", "53", "57", "49", "53", "57"], "button"=>"", "id"=>"15429", "locale"=>"fr"}

Completed 500 Internal Server Error in 434ms
ActiveRecord::AssociationTypeMismatch - Site(#70057393394640) expected, got String(#8388700):

1 Ответ

0 голосов
/ 27 декабря 2018

Можете ли вы показать, как вы определяете @sites переменную?Проверьте, не присвоено ли ему строковое значение вместо набора сайтов.

...