From 8fa3b80ba2ac617b5b1292e5617dc5e487b7b56d Mon Sep 17 00:00:00 2001 From: Jonathan Hefner Date: Wed, 28 Oct 2020 17:06:07 -0500 Subject: [PATCH] =?UTF-8?q?Edit=20GS=20guide=20=C2=A7=20Deleting=20an=20Ar?= =?UTF-8?q?ticle=20[ci-skip]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fixes #39920. Resolves #38329. Co-Authored-By: Ryan Bigg Co-Authored-By: Petrik de Heus --- .../images/getting_started/confirm_dialog.png | Bin 17507 -> 0 bytes guides/source/getting_started.md | 130 ++++++------------ 2 files changed, 45 insertions(+), 85 deletions(-) delete mode 100644 guides/assets/images/getting_started/confirm_dialog.png diff --git a/guides/assets/images/getting_started/confirm_dialog.png b/guides/assets/images/getting_started/confirm_dialog.png deleted file mode 100644 index ce65734e6c4e9f027af6e04fb05f954d431d6f0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17507 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ΞSc?v7uuBIi2CAUO>CXw79H<5ufz%V zsdVIl47NA^P7wN|@~wui0CWcGb! zd;HNsE+9#6l5>!SV24X4C?FQx3S{y_&0wWlmjq#_)+g;hM5K6n?lVB^ON%$j{#(=r z6u}vF6V2Si#qI@Nq{@Z30@;N-Bw@;oK;K9AIf<(!Q(IisuDAl#Hp+yzvQuR6N%E~( z;8?YOgaU4^iPz+zqu91sCfB0I7@)Q*J=AaHo1T8Xc|qEGZ$;-4GC8V|_9k z1&NK(7l`|BA6`ylcOAV33UovI&4dZxfSuy@wJ*@9rHxbdzm0Cs`%kHgJB_o*irN~>L)aEU_xw90zcZg6cRQw!s8Jywy{1>ld>j>iuzzF-wW@hNOBJ5& zc0F#@9PTRoJ6iDSVLR#*s=09?mL}l
q(X-EVUgd1k&I#j zE9XcK^qj{>6W$@Xl0UmdA8JK({Kn__3BcAG?O3tE#^bcP(dug0rAH*L1Eq9Nf^b#M zKdQlXa&lT6JUcs!8Htbu*!Ziy-Q4JpJA*@%X8%!$S`1hxfGDJT)+ci}gCY>SW~S6< zco%H-DD;K6ylr}Ja-!ydZZ$R>2JvuX_F2>a^fUxA87`|E6m zUDD_0$j^>C!J5MO)xRvKi-TShgV0zdBVa-Of^idKXw$oXx;_px6W7nhV_K5VDPktkb^-5Wr^?x>Ry zZK(RZCuGAW9-QzjQ0*@EO=(q@M*Sm7zs~8}%EIZs=Z!CcY&U?jH|~?<$-(Ur#pdw0 zva(T;(Q?{Ouoz}4DGm>hpcL}S9zohCw3~hamdgmWNjkr$0;cZoRn+f4^3*DHpcEM2 zyl-wF(1=G$(mL#P4@wsyd4(RVr!8Hy`CPFg4Q~D2#F6eKet=q#o+}$0~Jn_jH z{Q)k@#o>;w+6QA92@PN0_h9ld>g~~e9NhL&_iyz7wRm8HJ#r`j*{Xm<=^;Z{v9cA@#x!dB2*5B@Y)nlLmkLM?^*7G^+B3NU;4IN&6YV z2z{Xv#xT(d6tbDFX5oMN*uf=~^gqI>QiOx)S~{1`q2BMbteB!YdA+8_V4rssq-%P$ zA4y_#*i)64rN1rX;8E&%A#d^piw8qY2|cZ=Irb!_*jnm5BV_)^-Ez?FeyqE+qg^@p zof|%~eiR66Q&Uql@hkJYDhE_R%+laR;Ktw{k#_b2WqJsgeX3F0AQUQu5V?WA{>^LY z-N6Z43_NOt1~K4tmkVN!F1%FY=O86;TnaH*87JVKfiKd&zB+UH8V+!~B|s!}IldZk z;&1t%svslhv7PgZ<%BlH!@D#0=Z;qQjfSxG7-D+G>aiezG>TDM55Akr^(j001=hY; z+0Xa#rWvLcn1p-80-XUzzojBD#N3>mkDLm}g{ekIn_jBtXJ`1*>FMd!`PKS+A>u=- zM$WS}YaqUTiUmh#HMX_g6<{|W7o<44x}NRt@7vw?Yby#XL;Fvhmc0*M{|4?+Ahi7p z0UjVvRe-qse}`q=wgp2+01Z_0BTr31zd7aA)jd5ucdCU?lP1hOM|Z41Mw~AuoLicj z;H+4tcG~*&^oR^}5H2omaOaZI8_Q(0YG^4d95@-@AF#_`K4|dvw0Chi&92A;W??}N za6~1={DOkE3k0Sn0qsZ&OuHvmjLNTVd= z$FM^>VdW*on`c*)lZJNb-deue%JpBx%`~+&xlid3bO_LI`?ePJ^E+ce;J@G80gAo< wZtws21n+;zAozd(Zts7o^#ARXz-tTw`Km|czWj7R&OAt3TtTe-gVC4&2XBrSPXGV_ diff --git a/guides/source/getting_started.md b/guides/source/getting_started.md index 84993eedbe..292a44a876 100644 --- a/guides/source/getting_started.md +++ b/guides/source/getting_started.md @@ -1213,41 +1213,16 @@ page from the bottom of `app/views/articles/show.html.erb`: ``` -### Deleting Articles +### Deleting an Article -We're now ready to cover the "D" part of CRUD, deleting articles from the -database. Following the REST convention, the route for -deleting articles as per output of `bin/rails routes` is: +Finally, we arrive at the "D" (Delete) of CRUD. Deleting a resource is a simpler +process than creating or updating. It only requires a route and a controller +action. And our resourceful routing (`resources :articles`) already provides the +route, which maps `DELETE /articles/:id` requests to the `destroy` action of +`ArticlesController`. -```ruby -DELETE /articles/:id(.:format) articles#destroy -``` - -The `delete` routing method should be used for routes that destroy -resources. If this was left as a typical `get` route, it could be possible for -people to craft malicious URLs like this: - -```html -look at this cat! -``` - -We use the `delete` method for destroying resources, and this route is mapped -to the `destroy` action inside `app/controllers/articles_controller.rb`, which -doesn't exist yet. The `destroy` method is generally the last CRUD action in -the controller, and like the other public CRUD actions, it must be placed -before any `private` or `protected` methods. Let's add it: - -```ruby -def destroy - @article = Article.find(params[:id]) - @article.destroy - - redirect_to articles_path -end -``` - -The complete `ArticlesController` in the -`app/controllers/articles_controller.rb` file should now look like this: +So, let's add a typical `destroy` action to `app/controllers/articles_controller.rb`, +below the `update` action: ```ruby class ArticlesController < ApplicationController @@ -1263,27 +1238,27 @@ class ArticlesController < ApplicationController @article = Article.new end - def edit - @article = Article.find(params[:id]) - end - def create @article = Article.new(article_params) if @article.save redirect_to @article else - render 'new' + render :new end end + def edit + @article = Article.find(params[:id]) + end + def update @article = Article.find(params[:id]) if @article.update(article_params) redirect_to @article else - render 'edit' + render :edit end end @@ -1291,68 +1266,53 @@ class ArticlesController < ApplicationController @article = Article.find(params[:id]) @article.destroy - redirect_to articles_path + redirect_to root_path end private def article_params - params.require(:article).permit(:title, :text) + params.require(:article).permit(:title, :body) end end ``` -You can call `destroy` on Active Record objects when you want to delete -them from the database. Note that we don't need to add a view for this -action since we're redirecting to the `index` action. +The `destroy` action fetches the article from the database, and calls [`destroy`]( +https://api.rubyonrails.org/classes/ActiveRecord/Persistence.html#method-i-destroy) +on it. Then, it redirects the browser to the root path. -Finally, add a 'Destroy' link to your `index` action template -(`app/views/articles/index.html.erb`) to wrap everything together. +We have chosen to redirect to the root path because that is our main access +point for articles. But, in other circumstances, you might choose to redirect to +e.g. `articles_path`. + +Now let's add a link at the bottom of `app/views/articles/show.html.erb` so that +we can delete an article from its own page: ```html+erb -

Listing Articles

-<%= link_to 'New article', new_article_path %> - - - - - - +

<%= @article.title %>

- <% @articles.each do |article| %> - - - - - - - - <% end %> -
TitleText
<%= article.title %><%= article.text %><%= link_to 'Show', article_path(article) %><%= link_to 'Edit', edit_article_path(article) %><%= link_to 'Destroy', article_path(article), - method: :delete, - data: { confirm: 'Are you sure?' } %>
+

<%= @article.body %>

+ +
    +
  • <%= link_to "Edit", edit_article_path(@article) %>
  • +
  • <%= link_to "Destroy", article_path(@article), + method: :delete, + data: { confirm: "Are you sure?" } %>
  • +
``` -Here we're using `link_to` in a different way. We pass the named route as the -second argument, and then the options as another argument. The `method: :delete` -and `data: { confirm: 'Are you sure?' }` options are used as HTML5 attributes so -that when the link is clicked, Rails will first show a confirm dialog to the -user, and then submit the link with method `delete`. This is done via the -JavaScript file `rails-ujs` which is automatically included in your -application's layout (`app/views/layouts/application.html.erb`) when you -generated the application. Without this file, the confirmation dialog box won't -appear. +In the above code, we're passing a few additional options to `link_to`. The +`method: :delete` option causes the link to make a `DELETE` request instead of a +`GET` request. The `data: { confirm: "Are you sure?" }` option causes a +confirmation dialog to appear when the link is clicked. If the user cancels the +dialog, the request is aborted. Both of these options are powered by a feature +of Rails called *Unobtrusive JavaScript* (UJS). The JavaScript file that +implements these behaviors is included by default in fresh Rails applications. -![Confirm Dialog](images/getting_started/confirm_dialog.png) +TIP: To learn more about Unobtrusive JavaScript, see [Working With JavaScript in +Rails](working_with_javascript_in_rails.html). -TIP: Learn more about Unobtrusive JavaScript on -[Working With JavaScript in Rails](working_with_javascript_in_rails.html) guide. - -Congratulations, you can now create, show, list, update, and destroy -articles. - -TIP: In general, Rails encourages using resources objects instead of -declaring routes manually. For more information about routing, see -[Rails Routing from the Outside In](routing.html). +And that's it! We can now list, show, create, update, and delete articles! +InCRUDable! Adding a Second Model ---------------------