Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails RubyonRails 2-关于归属、有一个、有多个等的混淆_Ruby On Rails_Ruby_Activerecord_Rails Activerecord_Ruby On Rails 2 - Fatal编程技术网

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”
?很好,这就解决了它-我真的不知道活动记录关系被命名了,我一直认为它只是表的名称,如果是一对多的话,它将被多元化,等等。