- 浏览: 29391 次
- 性别:
- 来自: 上海
最新评论
文章列表
9.1 Basic Authentication
基本认证
如果你想要在线发布你的blog,任何人都能够增加,编辑和删除articles,或者删除comments。
Rails提供了一个简易的HTTP验证系统,在这种情况下能足以胜任。
在ArticlesController里,我们需要用一个方式来阻止访问任意的actions,如果访问者没有被认证的,这儿我们可以用Rails http_basic_authenticate_with 方法,如果在那个方法允许的情况下, 来允许访问所需求的action。
为了使用这个认证系统,我们明确规定它位于ArticlesContr ...
如果你删除一个article,那么它关联的comments同样也会被删除。否则他们会在数据库中占据掉空间。Rails允许你用dependent属性,这是涉及到关联性中的一个属性来获取到这个。修改Article模型,app/models/article.rb 类似于下面:
classArticle < ActiveRecord::Base
has_many :comments, dependent: :destroy
validates :title, presence: true,
length: { minimum: 5}
...
删除comments
一个blog的另外一个重要的特征就是能够删除多余的comments。为了做到这个,我们需要在视图中实现一系列的代码,以及在CommentsController中实现destroy的action。
因此首先,让我们来增加删除的链接,在局部文件中 app/views/comments/_comment.html.erb:
<p>
<strong>Commenter:</strong>
<%= comment.commenter %>
</p>
<p>
< ...
跳转一个局部form
让我们同样地把那个新的comment部分移出来,形成自己的局部文件。再次创建一个文件 app/views/comments/_form.html.erb 包含下面代码
<%= form_for([@article, @article.comments.build]) do |f| %>
<p>
<%= f.label :commenter %><br>
<%= f.text_field :commenter %>
</p>
<p>
...
重构
现在我们已经有可以操作的articles和comments,来看一下模板app/views/articles/show.html.erb。它变得越来越冗长和笨拙。我们可以用局部文件来清理.
7.1 Rendering Partial Collections
首先,我们来建一个comment的局部文件, 把用来显示article所有的comment提取出来。创建这个文件 app/views/comments/_comment.html.erb,编辑上下面的代码:
<p>
<strong>Commenter:</strong>
...
创建一个控制器
刚在在学习模型的相关内容,你可以调整一下注意力来创建一个相对应的控制器。我们将再一次用以前用过的相同的命令:
$ rails generate controller Comments
这个命令会创建六个文件和一个空文件夹:
File/Directory
Purpose
app/controllers/comments_controller.rb
Comments 控制器
app/views/comments/
控制器的视图被存放在这里
test/controllers/comm ...
为 Comments(评论) 增加一个路由
正如同 welcome的控制器一样,我们需要增加一个路由,以致于Rails会知道指向何处,让我们可以看到 comments。再一次打开配置文件 config/routes.rb,参照下面这样编辑:
resources :articlesdo
resources :comments
end
在articles内创建了一个内嵌的资源comments. 这是涉及到继承关联性的另一个部分,存在于 articles 和 comments之间。
p.s. 想要了解更多的关于路由的信息,可以参考 Rails Routing
...
Active Record关联性让你能简单地声明两个模型间的关系。这个例子就是关于 评论 和 文章 这两个模型间的关系, 你可以通过下面的说明来了解两者之间关系:
每一个评论都属于一篇文章的。
每一篇文章可以拥有许多个评论的。
事实上,这已经非常接近其语法结构了,Rails通常就是这样来声明其关联性的。你已经在 评论 的模型中看到过这一行代码了 app/models/comment.rb,使得每一个评论都属于一篇文章:
classComment < ActiveRecord::Base
belongs_to :article
end
你将需要去编辑这个文 ...
是时候为应用程序增加第二个模型了。第二个模型将会用来处理关于文章的评论Comment。
6.1 Generating a Model
我们将会看到之前用过的同样的生成器,在创建Article模型的时候。这一次我们将会创建一个Comment模型,来关联到文章的评论。在命令窗口运行这个命令:
$ rails generate model Comment commenter:string body:text article:references
这个命令将会产生四个文件:
文件
目的
db/migrate/2014012020101 ...
现在我们准备来完成“D”这一部分,“CRUD”其中的一点,从数据库中删除articles。继续REST这茬儿,对于删除article的路由,只要运行 rake routes 查看其输出内容:
DELETE/articles/:id(.:format) articles#destroy
delete的路由方法 ...
我们的edit页面和new页面非常相似,事实上,他们共同共享着相同的代码用来显示form。 让我们用一个局部视图来剔除重复的代码。按照惯例,局部文件的前缀是一下划线。
ps. 想了解更多的局部文件信息,可以参考Layouts and Re ...
我们已经完成了CRUD中的“CR”部分了。现在让我们关注“U”这部分,更新articles。
第一步我将要做的是,在ArticlesController中增加一个action edit。
defedit
@article= Article.find(params[:id])
end
这个视图将会包含一个form,类似于我们用过的那个,在我们创建新的articles的时候。创建一个文件app/views/articles/edit.html.erb,编辑如下:
<h1>Editing article</h1>
<%= fo ...