У меня есть два объекта, Vpn
и Organisation
organization.rb
has_many :vpns, :foreign_key => "managed_by"
vpn.rb
belongs_to :managed_by, :class_name => "Organisation", :foreign_key => "managed_by"
Итак, в таблице vpns
есть столбец managed_by
, который фактически является идентификатором организации, но я не хочу называть его organisation_id
, чтобы избежать путаницы.
С этим связано, в моем представлении списка я могу сделать
<%= vpn.managed_by.nil? ? '' : vpn.managed_by.name %>
Чтобы получить название организации, к которой относится поле managed_by
, но если я попытаюсь обновить атрибуты, я получу ActiveRecord::AssociationTypeMismatch in VpnController#update
, поэтому по какой-то причине ожидается объект, а не строка, параметры, отправленные в запросе, как и ожидалось:
{"id"=>"1",
"authenticity_token"=>"RWu39MOqDiu8vbuAfPzyJXAP1CKIaxIFoUjwLl2pemc=",
"commit"=>"Save",
"vpn"=>{"id"=>"1",
"managed_by"=>"999"}}
Чтобы ничего не упустить, managed_by
в моей форме представлено как меню select
с использованием collection_select
:
<%= collection_select 'vpn', 'managed_by', @organisations, :id, :name, {:selected_value => @vpn.managed_by} %>
Где @organisations
— это просто результат активной записи, содержащий все организации.
Если я изменю belongs_to
в vpn.rb
на
belongs_to :organisation, :class_name => "Organisation", :foreign_key => "managed_by"
Обновление работает нормально, но затем в представлении списка я получаю сообщение об ошибке при попытке получить название организации:
undefined method `name' for 999:Fixnum