【发布时间】:2014-01-30 12:04:31
【问题描述】:
我有两个对象,Vpn 和 Organisation
organisation.rb
has_many :vpns, :foreign_key => "managed_by"
vpn.rb
belongs_to :managed_by, :class_name => "Organisation", :foreign_key => "managed_by"
所以,vpns 表有一个 managed_by 列,它实际上是一个组织 ID,但我不想将其命名为 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 使用collection_select 显示为select 菜单:
<%= collection_select 'vpn', 'managed_by', @organisations, :id, :name, {:selected_value => @vpn.managed_by} %>
其中@organisations 只是一个包含所有组织的活动记录结果。
如果我将vpn.rb 中的belongs_to 更改为
belongs_to :organisation, :class_name => "Organisation", :foreign_key => "managed_by"
更新工作正常,但在列表视图中尝试检索组织名称时出现错误:
undefined method `name' for 999:Fixnum
【问题讨论】:
-
谢谢,但是你有一个关于我应该如何正确修复这种关联的例子吗?
-
我用我的评论作为答案,并举了一个例子。希望对您有所帮助。
标签: ruby-on-rails ruby activerecord rails-activerecord ruby-on-rails-2