手工打造CURD心得
一.路由
1.路由的用途
将URL地址分发给控制器进行处理。
2.资源路由
当在编写CURD时我们在路由文件里写入了resources : articles
,当配置了资源路由,就不需要专门声明 index、show、new、edit、create、update 和 destroy 动作。
在 Rails 中,资源路由把 HTTP 方法和 URL 地址映射到控制器动作上。每个控制器动作也会映射到对应的数据库 CRUD 操作上。
HTTP方法 | 路径 | 控制器动作 | 辅助方法 |
---|---|---|---|
get | /articles | index | articles_path |
get | /articles/new | new | new_article_path(:id) |
get | /articles/show:id | show | article_path(:id) |
post | /articles/create | create | articles_path |
get | /articles:id/edit | edit | edit_article_path |
patch/put | /articles:id | update | article_path(:id) |
delete | /articles:id | destroy | article_path(:id) |
辅助方法的返回值是其路径。
3.Restful 应用程序
使用Rest概念建立命名路由,用Resource来当做识别的资源,也就是使用一个URL网址来代表一个Resource 。
记忆方式:show、new、edit、update、destroy是单数,对单一元素操作;index、create是复数,对群集操作。
eventpath(@event)需要参数,根据_HTTP动词决定show、update、destroy,是针对一个实例变量
eventspath毋需参数,根据_HTTP动词决定index、create
二.CURD流程
1.从new->create
在new.html.erb文件中<%=form_for :article,url :articles_path do |f|%>
articles_path 辅助方法告诉 Rails 把表单指向对应的URI 模式,根据前文的路由,可以理解,服务器发起post请求,指向create动作。
2.create
def create
#自动映射到对应的数据库
@article = Article.new(article_params)
#保存到数据库
@article.save
#对应到show动作
redirect_to @article
end
private
def article_params
params.require(:article).permit(:title,:text)
通过健壮参数,只提供想要的参数
3.show和index
把参数保存在一个实例变量中,然后把所有实例变量传递给视图
def show
@article = Article.find(params[:id])
end
def index
@article = Article.all()
end
5.edit与update
def edit
@article = Article.find(params[:id])
end
在edit.html.erb文件中,如果传递给的记录form_for是一种资源,即它对应于一组RESTful路由(例如,使用中的resources方法定义), 则可以进一步简化config/routes.rb。在这种情况下,Rails会简单地从记录本身推断出适当的URL,即转向update动作
`<%= form_for(@article) do |f| %>
def update
@article = Article.find(params[id])
if @article.update(article_params)
redirect_to @article
else
render 'edit'
end
end
6.form_for辅助方法
:article
此种是对象绑定的方式,通过表单,跟Model层的对象绑定,通常完成数据的增,改功能。使用符号:post
@article 实例变量
而在ruby语言中,实例变量也是种对象,即可以理解为
:@article,即可以调用其Article.new Article.find
<%= form_for @article do |f|%>
<%= form_for :article do |f|%>
7.destroy
def destroy
@article = Article.find(params[:id])
@article.destroy
redirect_to articles_path
end
此时完成操作后会定向到index动作
三.总结
浏览器发出请求给rails后 首先去访问路由文件,根据路由去控制器寻找相应的动作,动作操作模型中相应的资料,模型从数据库取出资料,最后给view样板。