新手问题 Rails Model 继承的疑问

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

初学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 我哪里出错了么?

共收到 9 条回复

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

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