手机商城笔记6

补充说明:前面我们修改和增加都使用了goods_id,没有像表单页面中需要的那些字段一样设置成attr_accessible,是因为我们数据库中该商品号字段设计为自增所以不需要在表单中添加该字段的输入框。而添加商品或修改商品都涉及到我们去修改数据库中的数据,而商品号我们在add页面没有去修改,是数据库自增的,在edit页面也没有修改商品号商品号仍然是原来的。至于我们根据goods_id来找到修改的链接页面这个我们只是读取,没有写,所以不设置attr_accessible,默认为protected的权限就够了,不能写入或修改,读取还是可以的。
					

?

?

?

数据的show、add已经做好了,现在来做数据的修改部分。

(1)我们点击修改的链接,会跳转到修改页面,不过修改页面的数据是假的数据,无论点击哪个商品的修改链接结果都是那个假数据页面,结果如下:

(2)上面的返回连接我们在一开始就做好了,这些链接什么的不涉及数据库操作我们在前面就做好了。我们要实现点击哪个修改链接都能在修改页面显示对应商品的数据,而不是假数据。

1.为了规范,且rails默认的路由规范,我们把带有视图的修改动作名update改为edit,这样我们就可以定义实际修改发生的动作名为update。

修改路由第19行update成edit如下,因为我们修改的是具体某个商品所以路由参数需要具体商品的goods_id,结果如下:

2.修改视图文件update.html.erb,不要使用refactor的方式,我们把里面的代码复制,然后删除update.html.erb,创建视图文件edit.html.erb,把原来update.html.erb的代码黏贴进去。

3.我们更改把控制器中update动作改为edit动作,并添加代码

10~12行修改为:

4.修改show页面的修改链接

原来的58行每个链接都是update,所以无论哪个商品点击修改链接都是同一个页面,都是一样的假数据

我们应该修改58行,后面添加参数goods_id,这样才能跳转到具体商品的修改页面

58行修改后如下:

5.我们测验一下是否可行,我们先把数据库中goods_id为1的记录goods_id改为111,这样数据库中第一条记录goods_id为2,如下:

然后我们在show页面光标移动到第一个修改链接时,左下角有显示该记录的goods_id /edit,说明结果就和数据库中对应上了。

6.上面的修改说明链接正确了,而且命名也规范了,但是这时候我们还需要用ruby代码去改写edit页面才能显示真实的数据而非假数据。

附注:如下sql语句是查询全部字段,*,如果我们写出具体字段会报错miss其余的字段,这个先不管,反正查询全部字段后你要使用部分字段还是全部字段都可以。

?

把edit页面由假数据的静态页面改成动态页面很有趣,因为你add页面模板跟edit页面模板都是一样的表单,区别在于edit页面的表单是显示数据库中的商品信息,而add页面表单空白需要我们输入,所以根据它们的共同点,我们这样来做:

1、把edit静态页面的代码全部删除

2、把add页面的代码全部复制到edit页面

只需要上面两步,也就是add页面和edit页面代码全部一样

结果就是我们点击某个商品链接,会自动跳转到该商品的edit页面,该页面会自动显示对应的数据库信息如下:

如上显示的页面和add页面一样,不过能使用对应控制器edit动作中在数据库获得到的数据展现在页面上。但是我们把带有添加字眼的文字都改成修改好了,如下第4行和第13行:

改为:

(3)既然两个add页面和edit页面代码一样,为何edit页面却能自动读取数据库中的数据并展现在页面呢?这个区别是因为页面可以使用对应的控制器动作中获取到的数据库数据的区别导致的。如下edit动作获取到数据库中对应:goods_id的商品信息,所以视图中能自动读取并展现,而add动作就没有读取数据库中的数据。

(4)这时候我们还需要添加一个真正的修改动作update,而且也要适当地去修改动态页面代码

1、添加路由第21行,注意http动作需要是post方式

2、控制器添加update动作第29~34行

3、将如下22行代码修改掉提交给哪个动作执行

原来的代码:

修改第22行后的代码:

4、结果如下,我们点击某个商品的修改链接,在后面添加3333华为

点击按钮提交成功转到show页面,并且数据确实修改成功,页面和数据库中的数据都能看到修改后的结果

?

上面修改商品的功能也完成了,接下来完成删除商品的功能,商品删除比上面就简单多了,删除功能不需要两个动作来完成(一个有视图一个没视图,如edit和update两个配合完成),因此不需要视图文件,

(1)添加路由第22行,rails规范中删除动作命名为destroy,而delete只是url命名为其他也行,不过从规范来讲最好还是命名为delete。因为删除的是某个具体商品,所以需要商品号goods_id做参数


(2)添加destroy动作,第36~41行

(3)修改show页面中删除的链接代码第59行

原来的代码:

修改第59行后的代码:


附注:.html.erb视图模板里面的页面链接url写的都是路由,也就是路由文件中get或post后面的东西,而不是写动作,所以是/delete而不是/destroy

(4)查看效果

原来的页面如下:

我们点击序号为6对应记录的删除链接之后,跳回本页面且记录删除成功了,说明删除功能完成:

?

?

时间: 2024-07-29 11:39:34

手机商城笔记6的相关文章

手机商城笔记3--实现后台第一个页面

接下来我们来制作后台,因为后台也有login登陆之类的页面,为了和前台区分开,我们都添加一个前缀back好了. 我们创建后台管理员的控制器,添加login动作 创建对应的视图文件夹并把后台纯净模板的login页面代码放入 添加路由: 创建后台css和img目录并把后台使用的样式和图片放入,如下图 设置后台引用样式文件和图片的路径常量11行和12行 用路径常量替换掉后台的login页面对样式和图片的引用地址 第9行的href原来为 替换后为: ? 然后图片引用用Ctrl+R来实现全部替换: ? (

手机商城第二天,各个功能按钮的切换与显示不同界面

这几天晚上练习科目三,一般都到10点多回来,所以更新比较晚. 代码已上传到码云上,有兴趣的可以下载看看 https://git.oschina.net/joy_yuan/ShoppingMall 上个项目中,页面切换,是做了一个BasePage,然后在里面利用了构造方法,调用构造时,就初始化其中的控件,然后在切换具体的页面时,再加载其中的数据. 在本项目中,是做了一个BaseFragment extends Fragment,然后按照Fragment的生命周期: 1.onCreate() 2.o

手机卫士 笔记

1. BroadcastReceiver 广播接受者 每次广播到来时 , 会重新创建 BroadcastReceiver 对象 , 并且调用 onReceive() 方法 , 执行完以后 , 该对象即被销毁 . 当 onReceive() 方法在 10 秒内没有执行完毕, Android 会认为该程序无响应 . 所以在BroadcastReceiver 里不能做一些比较耗时的操作 , 否侧会弹出 ANR(Application NoResponse) 的对话框 .如果需要完成一项比较耗时的工作

ectouch手机商城首页调用指定分类下的商品

ECTouch是国内市面上唯一开源的ECSHOP移动商城系统,为广大电商以最低的成本快速搭建移动商城.最近最一商城实例,手机版首页需要调用指定分类下的商品,ECtouch商城默认好像没有此调用方式,只能自己动手添加了. 方法如下: 1.打开mobile\include\apps\default\model\IndexModel.class.php 在最下面 } 之前添加以下代码 /**      * 获得指定分类下的商品      */      function assign_cat_good

手机商城第一天 loading界面,主界面与baseFragment的创建,Bufferknife的使用

之前的手机影音经过这2天的总结,又从新掌握了不少之前忘记的知识,加深了对于知识的印象,下面的这个是一个新的项目,商城APP,有用到很多旧的知识,当然又有很多新的知识等着我去挑战.学习. 代码托管到码云上,有兴趣的可以去下载看看 https://git.oschina.net/joy_yuan/ShoppingMall 1.创建loading界面 loading界面说白了就是一个简单布局的activity,在这个activity的oncreate方法里,利用handler发送一个延迟2秒的inte

SSM实现java开发电子手机商城在线商城系统源码 MySQL数据库

需求 基于Spring, SpringMVC, Mybatis 实现一个类似京东商城的3C电子商城系统, 能够实现商品管理与展示, 加入购物车, 支付购买等功能 运行环境 jdk1.8,tomcat8.5,mysql5.6,EclispseEE 项目技术 spring springmvc, mybatis, bootstrap, jsp, jquery, maven 注意事项 本项目需要安装redis, redis配置文件 src/main/resources/applicaitonContex

手机商城第五天,用recyclerview设置秒杀区域的布局,以及为该recyclerview设置item级的点击事件

代码已经托管到码云上,有兴趣的小伙伴可以下载看看: https://git.oschina.net/joy_yuan/ShoppingMall 之前可能忘记了web端,也就是这个APP里面内容的来源.其实就是一个简单的Tomcat里的小项目,目的是给这个APP提供一个json字符串,以及字符串里对应的内容,如图片,文字,这个web项目会放到下面. 这次的效果图如下,设置秒杀的布局以及给秒杀的每个item设置点击事件 这个秒杀布局,用的是recyclerview的横向布局. 一.在homeFrag

手机商城第六天,利用GridView实现推荐区域以及火爆区域

代码已提交码云,有兴趣的可以下载看看 https://git.oschina.net/joy_yuan/ShoppingMall 本次代码效果截图: 效果如上图所示,2个区域,一个是分三列显示,一个是分2列显示,代码类似,就拿一个区域做例子好了 一.推荐区域 布局文件: 整体是个线性布局,里面有2个子布局,一个线性布局,一个gridview. 重点是gridview里,设置numCloumns=3,表示分三列显示数据 <?xml version="1.0" encoding=&q

手机商城第四天,利用GridView和viewpager实现频道按钮和热门活动图片的展示

代码已经上传码云,有兴趣的小伙伴可以下载看看: https://git.oschina.net/joy_yuan/ShoppingMall 下面是这次的效果图: 其中哪些服饰.游戏.动漫等栏目以及下方的那个活动都是这次的内容. 一 .频道栏目的实现 ----GridView 布局文件,每行五个控件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="htt