Rails 关于数据库的一个问题

kouunn · 发布于 2014年11月16日 · 最后由 pynix 回复于 2014年11月24日 · 1144 次阅读
96

现在我有俩个模型

模型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的情况下如何实现?谢谢了!

共收到 20 条回复
145

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

9401

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

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

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

96

#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 > 


96

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

9401

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

2474

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

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

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

所以应该是 has_many :data

96

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

2474

#9楼 @kouunn

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

你查的什么字典

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

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

96

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

6864

#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 模型也正确,因为模型的类名是单数的。

11587

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

11587
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>
9800

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

96

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

96

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

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