我使用如下的rails生成器创建了2个模型:
$ bin / rails g模型管理器名称:字符串
和
$ bin / rails g模型博客/帖子标题:字符串管理器:引用
这样,我有2个模型文件:
# app/models/manager.rb
class Manager < ActiveRecord::Base
has_many :blog_posts
end
和
# app/models/blog/post.rb
class Blog::Post < ActiveRecord::Base
belongs_to :manager
end
转到rails控制台,我可以创建一个经理和一个这样的帖子:
$ manager1 = Manager.new
$ manager1.name =“ John Doe”
$ manager1.save
$ post1 = Blog :: Post.new
$ post1.title =“ Hello World”
$ post1.manager = manager1
$ post1.save
在控制台上,如果我这样做:
$ post1.manager.name
完美地运作。返回经理的姓名。但是,如果我这样做:
$ manager1.blog_posts
我希望得到经理职位的清单。但我收到此错误:
NameError:未初始化的常量Manager :: BlogPost
当我尝试在“博客:类别(app / models / blog / category)”和“博客:: Post(app / models / blog / post.rb)”之间进行多对多关系时,会遇到相同的问题
@Pavan解决了我的第一个问题...在此解决方案的基础上,我尝试执行以下操作:
# app/models/blog/post.rb
class Blog::Post < ActiveRecord::Base
belongs_to :manager
has_and_belongs_to_many :blog_categories, class_name: 'Blog::Category', foreign_key: 'blog_category_id'
end
和:
# app/models/blog/category.rb
class Blog::Category < ActiveRecord::Base
has_and_belongs_to_many :blog_posts, class_name: 'Blog::Post', foreign_key: 'blog_post_id'
end
基于此http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association
,我生成了以下迁移:
class CreateBlogCategoriesPosts < ActiveRecord::Migration
def change
create_table :blog_categories_posts, id: false do |t|
t.belongs_to :blog_post, index: true
t.belongs_to :blog_category, index: true
end
end
end
但是当我在控制台上尝试时:
$ post1 = Blog :: Post.first
$ post1.blog_categories
我收到此错误:
2.2.2:002> p.blog_categories PG :: UndefinedColumn:错误:列blog_categories_posts.category_id不存在LINE 1:... log_categories_posts“ ON” blog_categories“。” id“ =” blog_cate ...“ ^:选择” blog_categories “。* FROM” blog_categories“内部联接” blog_categories_posts“ ON” blog_categories“。” id“ =” blog_categories_posts“。” category_id“ WHERE” blog_categories_posts“。” blog_category_id“ = $ 1 ActiveRecord :: StatementInvalid列blog_categories_posts.category_id不存在LINE 1:... log_categories_posts“ ON” blog_categories“。” id“ =” blog_cate ... ^:SELECT“ blog_categories”。* FROM“ blog_categories” INNER JOIN“blog_categories_posts“ ON” blog_categories“。” id“ =” blog_categories_posts“。” category_id“ WHERE” blog_categories_posts“。” blog_category_id“ = $ 1
NameError:未初始化的常量Manager :: BlogPost
您已经has_namy :blog_posts
在中定义了manager.rb
,因此Rails将寻找您所用的a classname
BlogPost
。
您应该明确指定,classname
以告知Rails使用它。
# app/models/manager.rb
class Manager < ActiveRecord::Base
has_many :blog_posts, class_name: 'Blog::Post'
end
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句