新手问题 搞不懂关联表之间要怎么对不是主键的数据进行操作

satoshigi · 2014年01月21日 · 最后由 cisolarix 回复于 2014年02月01日 · 2545 次阅读

就是有两个表,一个 user 和一个 prize,然后两个表已经关联了,想在查 user 表的时候能看到 prize 表的 name,但是因为 prize 表的 id 和 prize_id 是不对应的,所以

user.find(1).prize.prize_name

得到的是 id 等于 1 的而不是 prize_id 等于 1 的,如果要让 user 表查到的 prize_id 对应上 prize 表上 prize_id 要怎么办

class User
  belongs_to :prize, primary_key: 'prize_id'
end

隐约觉得是个 X-Y 问题,楼主你原本想干嘛?

#1 楼 @Rei 其实 prize 自带的 id 是不想要的,想用 prize_id 来查

#3 楼 @satoshigi 别说你想查什么(代码层),说你想做什么(业务层)。

#2 楼 @Rei 用户从众多礼物中选一个,每个用户能选多个礼物

#5 楼 @satoshigi 多对多关联,has_and_belongs_to_many,prize 表只要 name 和 id,再加一个关联表 users_prizes ( user_id, prize_id ),users 表也去掉 prize_id。

#4 楼 @Rei 礼物表会有删增,然后公布的礼物编号和礼物的 id 不对应……QAQ

#7 楼 @satoshigi 意思是顶楼的 prize 表已经是关联表吗?补充一些详细的业务描述和数据描述,现在看不明白,为什么 prize 表里面同时有 id 和 prize_id,prize_id 指向哪?

#8 楼 @Rei 恩,管理员公布礼物和礼物的编号,用户每天可以从众多礼物中选一个并写上这个礼物的编号,管理员可以随时改动礼物的名单,所以导致了礼物的 id 是不固定,所以我想问的是怎样让用户表填的编号能和礼物表上的编号对应上,查询的时候可以从用户表查到礼物的名字,大概就是这样

#9 楼 @satoshigi 我觉得礼物的 id 是不变的啊,比如有 ID 为 1~10 的物品,今天允许选 1~6,明天允许选 5~9,但是礼物的 id 没变啊。

#10 楼 @Rei 如果管理员不小心删除了 id 为 1 的礼物,然后增加回去之后貌似会变成 id=11,所以我觉得很头疼这个问题 QAQ

#11 楼 @satoshigi 从数据管理角度,这是两个物品了。一般电商网站会保留所有商品信息和订单信息,商品条目只会软删除,你需要的 prize 表,比较像订单。

#12 楼 @Rei 其实 user 表比较像订单,我想到一个办法就是存进去的时候在 prize 表中找到对应的 id 再存到 user 表的 prize_id,虽然感觉比较麻烦

#12 楼 @Rei 非常感谢您的帮助

明显的 x-y problem

讨论得好高兴啊

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