Ruby on rails RubyonRails 2-关于归属、有一个、有多个等的混淆
我有两个对象,Ruby on rails RubyonRails 2-关于归属、有一个、有多个等的混淆,ruby-on-rails,ruby,activerecord,rails-activerecord,ruby-on-rails-2,Ruby On Rails,Ruby,Activerecord,Rails Activerecord,Ruby On Rails 2,我有两个对象,Vpn和organization organization.rb has_many :vpns, :foreign_key => "managed_by" belongs_to :managed_by, :class_name => "Organisation", :foreign_key => "managed_by" vpn.rb has_many :vpns, :foreign_key => "managed_by" belongs_to :ma
Vpn
和organization
organization.rb
has_many :vpns, :foreign_key => "managed_by"
belongs_to :managed_by, :class_name => "Organisation", :foreign_key => "managed_by"
vpn.rb
has_many :vpns, :foreign_key => "managed_by"
belongs_to :managed_by, :class_name => "Organisation", :foreign_key => "managed_by"
因此,vpns
表有一个managed\u by
列,该列实际上是一个组织id,但我不想将其命名为organization\u id
,以避免混淆
与此关联,在我的列表视图中,我可以
<%= vpn.managed_by.nil? ? '' : vpn.managed_by.name %>
为避免遗漏任何内容,在我的表格中,由管理的将显示为使用集合选择的菜单:
<%= collection_select 'vpn', 'managed_by', @organisations, :id, :name, {:selected_value => @vpn.managed_by} %>
更新工作正常,但在列表视图中,我在尝试检索组织名称时出错:
undefined method `name' for 999:Fixnum
您所做的事情非常令人困惑:您有两件事(一件属于关联,另一件是外键),它们都被称为
,由
管理。我不认为你能做什么来让Rails处理这个问题。如果您想在数据库中保留“由管理的列”,您应该为您的关联考虑另一个名称
我建议您使用:
belongs_to :organisation, :class_name => "Organisation", :foreign_key => "managed_by"
好像你已经试过了。要修复视图中的错误,必须使用以下命令:
<%= vpn.organisation.nil? ? '' : vpn.organisation.name %>
当使用vpn.managed_by
Rails查看外键,它是一个整数,而不是organization
对象。谢谢,但是你有没有关于如何正确修复此关联的示例?我用一个示例回答了我的评论。希望有帮助。您是否在属于调用中添加了:foreign\u key=>“managed\u by”
?很好,这就解决了它-我真的不知道活动记录关系被命名了,我一直认为它只是表的名称,如果是一对多的话,它将被多元化,等等。