新手问题 请问如何优化一对多关系的输入数据界面呢?

QueXuQ · 2012年11月27日 · 最后由 QueXuQ 回复于 2012年12月01日 · 3645 次阅读

简单的一对多的 model 的话,view 给用户的操作是这样的。例如,订单与产品,一个订单有许多产品。操作如下:

创建一个订单,输入订单相关数据,然后提交,进入订单show页面,然后在页面中点击添加产品,一个一个产品往里面加。

而我希望操作是这样的:

创建一个订单,然后输入订单相关数据。然后往里面添加产品,等添加完毕后,点击确认。在把数据存入数据库中。如果中途不需要这个订单了,直接按取消就可以了。

请问这应该怎么样设计呢?是先把产品信息保存在 session 中吗?等确认订单的时候,就把所有数据存入数据库里吗?

起初考虑,加个“取消”按钮,然后把加进去的东西,如果整个订单取消,不想要了。点击取消则是把全部产品,包括该订单删除。 但是这视乎每次需要用到数序库,不是一个很好的方案。

感觉你这要看你的订单怎么定义了。 1、如果是类似购物车,让用户在浏览过程中不断添加产品,那就最好在用户添加产品时,添加进对应的数据库。 2、如果是类似后台添加,每次是新建一个订单,然后添加多项产品的话,更适合在最后提交时一下添加进数据库。

#2 楼 @xiaogui 嗯。就是类似后台那样添加,如果关闭浏览器了,就不需要在保存了。 是不是一开始用 session 保存呢? 然后最后提交的时候,一次全部产品内容添加进数据库呢?

可以,但是直接入数据库也行,呵呵。

#4 楼 @xiaogui 好的。谢谢。一开始就想着可以放到 session 里。 但是就是怕 session 有什么缺陷或者安全问题的,听你这样说我就放心了。感激不尽。

呵呵 这种问题没有终极答案,都看当时的实际情况。

有点像购物车啊,购物车可以放在 session 中,把购物车的商品 id 放入 session 中。

#7 楼 @woaigithub 恩。就决定用 session 吧。先用着,到时候研究有什么安全问题在改进吧。^_^

#7 楼 @woaigithub @xiaogui 我想要做的要比购物车复杂些。我可能存产品 id,还要产品售价,产品数量。信息量稍稍有点多。应该存在 session 里还是可以的吧? 意思就是,订单里有: 1,产品 ID,产品数量,产品售价 2,产品 ID,产品数量,产品售价 ......

看了这里http://guides.ruby-china.org/action_controller_overview.html#4 似乎 session 不适合存我说的那东西。

session 只存放 id,更多的信息存放在数据库中,售价从产品信息中获取,除非你想要显示加入购物车的时候的售价,数量需要存储,但是不要放在 session 中。 避免安全问题有两个简单的而且基本的事情。 1.不要相信用户的输入,除了在 front-end 进行验证之外,在 after end 也要进行验证。 2.不要用用户输入的内容拼接字 sql 符串。 更多的安全相关可以查看下面的地址中的内容。 http://guides.rubyonrails.org/security.html

#10 楼 @woaigithub 恩。这个看过。 那我看来只好把数据都存入数据库中。一但选择取消订单就把订单以及订单内的产品一同全部删除了。

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