Объект рельсов, ожидаемый полученная строка

71
8

Я видел несколько вопросов, подобных этому, но никто не работал у меня.


У меня есть модель команды:


class Team < ActiveRecord::Base
has_one :p1, :class_name => "Player", :foreign_key => 'player_id', :validate => true
has_one :p2, :class_name => "Player", :foreign_key => 'player_id', :validate => true
end

в моей команде _form.html.erb, я имею в виду игроков как


  <%= f.collection_select :p1, Player.all, :id, :name %>

Однако при отправке формы я вижу ошибку:


Player(#28401456) expected, got String(#14111904)

Application Trace | Framework Trace | Full Trace
app/controllers/teams_controller.rb:47:in `new'


Parameters:
{"utf8"=>"✓",
"authenticity_token"=>"GSIcEvROFnvgGWT4HvE2VNqRw4NxU1J8iAw/WhZeRLk=",
"team"=>{"p1"=>"1"},
"commit"=>"Create Team"}

И вот код в строке


def create
@team = Team.new(params[:team])
.....
end

Любые идеи, пожалуйста?

спросил(а) 2013-03-27T23:00:00+04:00 6 лет, 11 месяцев назад
1
Решение
93

Наконец, это сработало:


 <%= f.collection_select :p1_id, Player.all, :id, :name %>

Вот волшебство:
Моя миграция имеет t.references p1 и создает столбец p1_id в базе данных.
Когда форма отправлена, рельсы ищут, чтобы заполнить идентификатор ссылки:


def create
@team = Team.new(params[:team])
.....
end

ответил(а) 2013-03-28T00:59:00+04:00 6 лет, 11 месяцев назад
35

Попробуйте следующее:

<%= f.collection_select :player_id, Player.all, :id, :name %>

ответил(а) 2013-03-27T23:06:00+04:00 6 лет, 11 месяцев назад
35

Я мог ошибаться, но думаю, что вместо


<%= f.collection_select :p1, Player.all, :id, :name %>

вам нужно


<%= f.collection_select :p1, :team_id, Player.all, :id, :name %>

http://api.rubyonrails.org/classes/ActionView/Helpers/FormOptionsHelper.html#method-i-collection_select

ответил(а) 2013-03-27T23:06:00+04:00 6 лет, 11 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема