`
jiajie0531
  • 浏览: 27636 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

rails4 6.4 Generating a Controller

阅读更多

创建一个控制器

刚在在学习模型的相关内容,你可以调整一下注意力来创建一个相对应的控制器。我们将再一次用以前用过的相同的命令:

$ rails generate controller Comments

这个命令会创建六个文件和一个空文件夹:

File/Directory

Purpose

app/controllers/comments_controller.rb

Comments 控制器

app/views/comments/

控制器的视图被存放在这里

test/controllers/comments_controller_test.rb

关于控制器的测试文件

app/helpers/comments_helper.rb

一个视图的helper文件

test/helpers/comments_helper_test.rb

对于helper的测试文件

app/assets/javascripts/comment.js.coffee

关于控制器的CoffeeScript文件

app/assets/stylesheets/comment.css.scss

关于控制器的CSS文件

如同其他的blog一样,我们的读者会在查看article之后直接创建他们的comments,一旦他们已经新增了他们的comment,将会返回到article显示界面,可以看到属于它的那些comment。为了做到这点,我们的CommentsController提供了一个方法来创建comments和删除多余的comments。

因此首先,我们来打开Article的显示模板 app/views/articles/show.html.erb,让我们来创建一个新的comment:

<p>

  <strong>Title:</strong>

  <%= @article.title %>

</p>

 

<p>

  <strong>Text:</strong>

  <%= @article.text %>

</p>

 

<h2>Add a comment:</h2>

<%= form_for([@article, @article.comments.build]) do |f| %>

  <p>

    <%= f.label :commenter %><br>

    <%= f.text_field :commenter %>

  </p>

  <p>

    <%= f.label :body %><br>

    <%= f.text_area :body %>

  </p>

  <p>

    <%= f.submit %>

  </p>

<% end %>

 

<%= link_to 'Back', articles_path %>

| <%= link_to 'Edit', edit_article_path(@article) %>

在Article显示界面上新增了一个form,通过调用CommentsController的create action来创建了一个新的comment。这里form_for的调用使用了一个数组循环,在其中内建了路由,类似于/articles/1/comments。

让我们来打开文件 app/controllers/comments_controller.rb,新建方法 create:

classCommentsController < ApplicationController

  defcreate

    @article= Article.find(params[:article_id])

    @comment= @article.comments.create(comment_params)

    redirect_to article_path(@article)

  end

 

  private

    defcomment_params

      params.require(:comment).permit(:commenter, :body)

    end

end

在这里你会看到稍微有点复杂,超过你以前所编辑过的articles控制器。你所建立的内嵌的会有个副作用。对于comment的每一个request必须能够跟踪到每一个新增comment所属的article,,因此对于Article模型的find方法的初始化调用,来获取所需查询中的article。

另外,代码利用了一些涉及到关联性调用的方法。我们使用@article.comments的create方法来创建和保存comment。这会自动关联到comment,使其属于特定的article。

一旦我们已经创建了一个新的comment, 我们就跳转到原来的article,使用的是article_path(@article)这个helper。正如 我们已经看到的,调用了ArticlesController的show action,然后跳转到show.html.erb模板。这就是我们想要显示comment的地方,让我们来增加这个视图 app/views/articles/show.html.erb.

<p>

  <strong>Title:</strong>

  <%= @article.title %>

</p>

 

<p>

  <strong>Text:</strong>

  <%= @article.text %>

</p>

 

<h2>Comments</h2>

<% @article.comments.each do |comment| %>

  <p>

    <strong>Commenter:</strong>

    <%= comment.commenter %>

  </p>

 

  <p>

    <strong>Comment:</strong>

    <%= comment.body %>

  </p>

<% end %>

 

<h2>Add a comment:</h2>

<%= form_for([@article, @article.comments.build]) do |f| %>

  <p>

    <%= f.label :commenter %><br>

    <%= f.text_field :commenter %>

  </p>

  <p>

    <%= f.label :body %><br>

    <%= f.text_area :body %>

  </p>

  <p>

    <%= f.submit %>

  </p>

<% end %>

 

<%= link_to 'Edit Article', edit_article_path(@article) %> |

<%= link_to 'Back to Articles', articles_path %>

现在你可以在你的blog中增加多个article和comment,把它们显示在正确的地方。



 

original text: http://guides.rubyonrails.org/getting_started.html#generating-a-controller

 

—end

  • 大小: 14.8 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics