Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.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 Rails 3 ActiveRecord有很多多态性-为什么不';t保存以插入联接表的第一个对象的id?_Ruby On Rails_Activerecord_Has Many_Polymorphism - Fatal编程技术网

Ruby on rails Rails 3 ActiveRecord有很多多态性-为什么不';t保存以插入联接表的第一个对象的id?

Ruby on rails Rails 3 ActiveRecord有很多多态性-为什么不';t保存以插入联接表的第一个对象的id?,ruby-on-rails,activerecord,has-many,polymorphism,Ruby On Rails,Activerecord,Has Many,Polymorphism,智者 请帮助我解决我有很多多态对象创建问题 我在中间有一个连接表的两个对象之间有多态的HasyHub关系。一边是首字母缩略词(和其他对象),另一边是类别。在它们之间,两个对象之间有一个连接对象 我无法成功创建带有类别的首字母缩略词。但是,我可以创建一个没有类别的首字母缩略词,然后将该类别添加到现有的首字母缩略词中 我的模型对象看起来像以下代码: class Acronym < ActiveRecord::Base has_many :category_belongings, :as =

智者

请帮助我解决我有很多多态对象创建问题

<>我在中间有一个连接表的两个对象之间有多态的HasyHub关系。一边是首字母缩略词(和其他对象),另一边是类别。在它们之间,两个对象之间有一个连接对象

我无法成功创建带有类别的首字母缩略词。但是,我可以创建一个没有类别的首字母缩略词,然后将该类别添加到现有的首字母缩略词中

我的模型对象看起来像以下代码:

class Acronym < ActiveRecord::Base
  has_many :category_belongings, :as => :categorizable, :dependent => :delete_all
  has_many :categories, :through => :category_belongings
end

class Category < ActiveRecord::Base
  has_many :category_belongings, :dependent => :delete_all
  has_many :acronyms, :through => :category_belongings, :source => :categorizable, :source_type => 'Acronym'
end

class CategoryBelonging < ActiveRecord::Base
  belongs_to :categorizable, :polymorphic => true
  belongs_to :category
end
我假设在首字母缩略词插入中,会创建首字母缩略词id,但我没有看到任何输出指示该首字母缩略词id的值。对我来说,错误很明显,当我尝试将新行插入category_Attowings时,首字母缩略词_id为Nil。我是否需要以某种方式将首字母缩略词_id指向可分类的_id?如果是这样,我该怎么做


我是rails新手,我正在尝试维护和改进现有系统。谢谢您的帮助。

根据您希望执行的操作,您需要使用
接受
的嵌套属性。这将允许您在创建首字母缩略词时创建类别。下面是您应该如何设置它

class Acronym < ActiveRecord::Base
  has_many :categories, :through => :category_belongings
  has_many :category_belongings, :dependent => :destroy
  accepts_nested_attributes_for :acronyms

  attr_accessible :acronyms_attributes      
end

class Category < ActiveRecord::Base
  has_many :acronyms, :through => :category_belongings
  has_many :category_belongings, :dependent => :destroy     
end

class CategoryBelonging < ActiveRecord::Base
  belongs_to :acronym
  belongs_to :category
end
类首字母缩略词:类别\u物品 拥有多个:类别财产,:依赖=>:销毁 接受以下内容的\u嵌套\u属性\u:acronyms 属性可访问:首字母缩略词属性 结束 类类别:category\u物品 拥有多个:类别财产,:依赖=>:销毁 结束 类categorybeloging
此设置允许您在创建首字母缩略词时嵌套表单并创建类别。要了解有关所有选项的更多信息,请签出。这也有一些关于嵌套表单的好信息。

我的代码似乎很好——我被一个Rails bug咬了一口。我解决了这个问题,将我的rails版本移动到3.2.8,并根据这些说明启用了安全补丁。之后,一切正常,无需更改代码


你在这里有很多事情要做。看起来你想要的只是
有很多::到
,所以你可以加入你的首字母缩略词和类别模型。设置多态关联有什么特别的原因吗?我使用多态关联是因为首字母缩略词不是唯一使用类别的实体。我还有一些与之有类似联系的课程。其他班级也遇到了同样的问题。啊,这是有道理的。您是否确保在您的模型中为设置了
接受\u嵌套的\u属性\u?我没有在粘贴的代码中看到这一点,这是关键,rails知道它可以在同一表单中创建模型。如果你有所有这些,那么粘贴一份你的表格也可能会有帮助。我尝试了这一点,正如你在帖子中提到的那样,但收到了一个错误:“没有发现名称‘首字母缩写’的关联。它是否已定义?”我正在阅读你发给我阅读的文档。有一件事需要澄清——我不需要同时创建一个类别作为首字母缩略词。类别是预定义的-我只想创建一个指向现有类别的首字母缩略词。系统会跳闸,因为它在联接表中设置了一个带有空首字母缩写id的行。
class Acronym < ActiveRecord::Base
  has_many :categories, :through => :category_belongings
  has_many :category_belongings, :dependent => :destroy
  accepts_nested_attributes_for :acronyms

  attr_accessible :acronyms_attributes      
end

class Category < ActiveRecord::Base
  has_many :acronyms, :through => :category_belongings
  has_many :category_belongings, :dependent => :destroy     
end

class CategoryBelonging < ActiveRecord::Base
  belongs_to :acronym
  belongs_to :category
end