问候好人!
我想通过另一个模型链接2个模型:
class Article < ActiveRecord::Base
...some callbacks...
has_many :article_images, dependent: :destroy
has_many :images, through: :article_images
...some methods...
end
class Image < ActiveRecord::Base
...some callbacks...
has_many :article_images, dependent: :destroy
has_many :articles, through: :article_images
...other methods...
end
class ArticleImage < ActiveRecord::Base
belongs_to :article
belongs_to :image
end
当我尝试使用&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;&lt;或create():
art = Article.find 2 #=> <Article id: 2, category: 14, template: 2, param: "2">
art.images #=> <ActiveRecord::Associations::CollectionProxy []
img = Image.find 2 #=> <Image id: 2, filename: "testna2.jpg">
art.images << img #=> <ActiveRecord::Associations::CollectionProxy [#<Image id: 2, filename: "testna2.jpg">]>
当我尝试以相反的方式执行此操作时会出现问题:
img = Image.find 2
img.articles #=> ArgumentError: wrong number of arguments (1 for 0)
我甚至没有来到我将图像对象分配给文章的部分,看起来关联只能在一个方向上工作 - art.images返回一个集合,但img.articles会导致错误。
这是我的架构的关键部分(使用mySQL):
create_table "articles", force: true do |t|
t.integer "category"
t.integer "template"
t.string "param"
end
create_table "article_images", force: true do |t|
t.integer "article_id"
t.integer "image_id"
t.string "lang"
t.string "title"
t.text "desc"
end
create_table "images", force: true do |t|
t.string "filename"
end
这是跟踪(似乎问题不是由我的模型引起的?):
2.0.0p247 :023 > img.articles
ArgumentError: wrong number of arguments (1 for 0)
from /home/ziga/.rvm/gems/ruby-2.0.0-p247@goopti-storefront/gems/activerecord-4.0.0/lib/active_record/associations/builder/association.rb:70:in `articles'
from (irb):23
from /home/ziga/.rvm/gems/ruby-2.0.0-p247@goopti-storefront/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start'
from /home/ziga/.rvm/gems/ruby-2.0.0-p247@goopti-storefront/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start'
from /home/ziga/.rvm/gems/ruby-2.0.0-p247@goopti-storefront/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
有没有人知道发生了什么?起初我使用 has_and_belongs_to_many 连接文章和图像模型,但后来我认为最好包含一些额外列的第三个模型(除了ID)。现在这似乎不是一个好主意...
答案 0 :(得分:0)
好的,看起来我发现了导致错误的原因,但我仍然不确定原因 - 我在我的代码中使用了 attr_accessor ,看起来问题就在于它的名字。< / p>
我改变了
attr_accessor :association
到
attr_accessor :assoc
我的问题突然消失了,虽然使用 @association 变量的方法甚至在我重命名之前就被注释掉了。
我仍然不确定 attr_accessor 如何影响模型和关联,但我认为“关联”可能是rails中的保留字(couldn'但是在任何列表中找到它。)
如果有人遇到同样的问题,那么我建议你检查你的代码是否有可疑的attr_accessors或变量和方法名称。
我仍然无法对发生的事情做出最终结论,所以如果你认为你对此问题有所了解,请发表评论:)