Rails 关于数据库的一个问题

kouunn · 2014年11月16日 · 最后由 pynix 回复于 2014年11月24日 · 2578 次阅读

现在我有俩个模型

模型1
class Course < ActiveRecord::Base
    has_many:datum
end

Course 的主键是默认的 id,还有一个键是 course_id

模型2
class Datum < ActiveRecord::Base
    belongs_to:course
end

datum 的主键也是键是默认的 id

现在想实现课程和资料的对应,Course.first.datum 显示第一个课程对应资料,在不修改 course 的默认主键 id 的情况下如何实现?谢谢了!

给 Datum 表增加 course_id,course 表不需要 course_id

顶楼上,就是楼上说的那样做,然后 Course.first.datums 才能显示第一个课程对应资料

模型1
class Course < ActiveRecord::Base
    has_many :datums # not datum
end

#1 楼 @suupic 这样是可以解决,但是现在 datum 的 course_id 键值必须和 course 的主键 id 值一样也就是必须是自增长的 1 2 3 4 5,因为现在 course 除了主键 id 外还有个 course_id,像 nz150001 这样的编号,不知道我说的明白么,谢谢了

#2 楼 @kai209209 谢谢解答,按 1L 的说话解决了,但是不是我想要的,还有就是 datum 是 data 的复数,不用加 s

2.1.2 :006 > Course.first.datum
  Course Load (0.3ms)  SELECT  "courses".* FROM "courses"   ORDER BY "courses"."id" ASC LIMIT 1
  Datum Load (0.1ms)  SELECT "data".* FROM "data"  WHERE "data"."course_id" = ?  [["course_id", 1]]
 => #<ActiveRecord::Associations::CollectionProxy [#<Datum id: 1, course_id: "1", content: "啧啧啧啧啧啧!", data_type: "讲义", student_id: "2011se021", created_at: "2014-11-05 16:33:41", updated_at: "2014-11-16 05:25:50", name: nil>]> 
2.1.2 :007 > 


#3 楼 @flowerwrong 谢谢解答,因为我 rails g scaffold data,然后他的模型就边成 datum,可能 data 这次比较特殊吧,我英语也没学好,哈哈!

#5 楼 @kouunn 😓 英语没学好,丢人丢大了!!!

datum 是单数....data 才是复数....

...差点被你们骗了...

模型名是单数...表名是复数……

所以应该是 has_many :data

#8 楼 @Kabie 大哥你再查查字典吧 datum 确实是复数

#9 楼 @kouunn

模型名是单数...表名是复数

你查的什么字典

[1] pry(main)> 'data'.singularize
=> "datum"

#10 楼 @Kabie 我用手机的字典 有道字典,网上我也查过。确实我也很迷惑,模型应该是单数,可是 data 比较特殊吧,我 g scaffold data 然后他给我弄个 datum 模型 我这些是直接 copy 的源码 不是自己编的 你可以试试 或者我发源码

长知识了,data or datum 到底哪个是复数呢?

#9 楼 @kouunn 看你自己贴的代码吧

Course Load (0.3ms)  SELECT  "courses".* FROM "courses"   ORDER BY "courses"."id" ASC LIMIT 1
  Datum Load (0.1ms)  SELECT "data".* FROM "data"  WHERE "data"."course_id" = ?  [["course_id", 1]]

courses 对应 data,所以至少在 Rails 里,data 是复数,8 楼 正解。生成一个 Datum 模型也正确,因为模型的类名是单数的。

楼主,你不要吧 course_id 当做 Course 的键就可以了。

irb(main):029:0* Custom.new
=> #<Custom id: nil, custom_id: 0, created_at: nil, updated_at: nil>
irb(main):030:0> Order.new
=> #<Order id: nil, custom_id: 0, created_at: nil, updated_at: nil>

data 作为模型名称也是醉了。。。。

#13 楼 @yuhaidonghd 可能是有道词典弄错了,我现在搞明白了。

#12 楼 @bluesky0318 datum 是单数,data 是复数

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