我在两个模型之间进行了简单的关联,即作者和故事。
class Story < ActiveRecord::Base
validates :category_id, presence: {message: "Se debe escoger una categoría"}
validates :cuento, presence: {message: "Debe tener algun relato para ingresar"}
validates :nombre, presence: {message: "No se puede ingresar relato sin titulo"}
belongs_to :author, class_name: "Author", :primary_key=>"id", :foreign_key => "author_id"
end
class Author < ActiveRecord::Base
has_many :stories, :class_name => "Story", :primary_key => "id", :foreign_key =>"author_id"
end
在架构中:
create_table "authors", force: true do |t|
t.string "nombre"
t.date "bod"
t.string "pais"
t.string "ciudad"
t.datetime "created_at"
t.datetime "updated_at"
t.text "bio"
t.integer "user_id"
end
create_table "stories", force: true do |t|
t.string "nombre"
t.integer "category_id"
t.date "fecha"
t.datetime "created_at"
t.datetime "updated_at"
t.text "resumen"
t.text "cuento"
t.integer "author_id"
end
add_index "stories", ["author_id"], name: "index_stories_on_author_id", using: :btree
现在,如果我在控制台上执行简单查询,例如:
Author.joins(:故事)
然后返回:
ActiveRecord :: ConfigurationError:名为'stories'的关联不是 作者发现;也许你拼错了?
此查询可能导致什么问题?
更新 我补充说:
class Author&lt;的ActiveRecord :: Base的 has_many:stories,class_name:“故事” 结束 类故事&lt;的ActiveRecord :: Base的 belongs_to:author,class_name:“作者” 结束 但是,在控制台中看起来是同样的错误:(
'ActiveRecord :: ConfigurationError:在作者上找不到名为'stories'的关联;也许你拼错了吗?' 其他一些想法???'谢谢!
更新2 我在模型代码中进行了更改,添加了将optionals class,foreign_key,primary_key放入的建议,但仍然没有......
答案 0 :(得分:0)
这很奇怪,因为一切看起来都是正确的。这只是一个疯狂的猜测,但尝试将class_name添加到关联,即has_many :stories, class_name: "Story"
答案 1 :(得分:0)
如果您使用ActiveRecord::Base
继承课程
然后,没有必要提供额外的选项,如::class_name => "Story", :primary_key => "id", :foreign_key =>"author_id"
class Story < ActiveRecord::Base
validates :category_id, presence: {message: "Se debe escoger una categoría"}
validates :cuento, presence: {message: "Debe tener algun relato para ingresar"}
validates :nombre, presence: {message: "No se puede ingresar relato sin titulo"}
belongs_to :author
end
class Author < ActiveRecord::Base
has_many :stories
end
如上所述简化代码。它会工作。 感谢。