新手问题 Rails Model 继承的疑问

feex · 2016年02月18日 · 最后由 dudu_zzzz 回复于 2016年02月29日 · 2662 次阅读

初学 ruby

------------------------------ model 部分 ------------------------------
class User < ActiveRecord::Base
end

class Member < ActiveRecord::Base
    belongs_to :user
end

class ProjectMember < Member
end

------------------------------ spec 部分 ------------------------------
    factory :project_member do
      association :user, :factory => :user
      project
      access_level { ProjectMember::MASTER }
    end 

此时 p ProjectMember.instance_methods 中明明有 user= 这个函数,但是执行 rspec 却出错

提示 factory_girl 生成假数据时出错 2) project_member factory should be valid
Failure/Error: expect(build(factory_name)).to be_valid

ActiveRecord::AssociationNotFoundError: Association named 'user' was not found on ProjectMember; perhaps you misspelled it?

如果将 ProjectMember 改为

class ProjectMember < Member
  belongs_to :user
end

则一切 OK 我哪里出错了么?

Rails 版本?

其实没有用 rails,用的 activerecord 4.2.5.1, factory_girl 4.5.0 因为只想搭个 api 服务器,于是用的 grape

设计 model 和命名都需要符合常理,这样写代码时才不费力。用常理来说,user has many members 或者 user has one member, 你觉得讲得通吗?另外 belongs_to 的另一端也要写的。

5 楼 已删除

实际上 member is a user,member 表里有一个外键 user_id

那这么写是不对的,你可能把继承和 association 搞混了。http://guides.rubyonrails.org/association_basics.html

关联是可以继承的,我新开了个 Rails 项目测试通过。楼主不用 factory 看看 ProjectMember 有没有 user 关联方法?

我这边刚用过关联的继承,没有问题,rails 版本是 4.2.1 @rei

需要 登录 后方可回复, 如果你还没有账号请 注册新账号