[RoR]Problemen met een record deleten

Pagina: 1
Acties:

  • Flapp
  • Registratie: December 2004
  • Laatst online: 02-01 20:16
Ik ben onlangs begonnen met RoR (Ruby on Rails) te leren en dat gaat mij redelijk goed af...
De tutorial gevolgd, en alles ging goed tot het toevoegen van de delete functie.

Volgens de tutorial om een record te deleten moet je
code:
1
action: => "delete"

gebruiken.

Dat is het in ieder geval niet omdat ik een foutmelding kreeg die zegt dat de functie niet herkent word.

Hierna heb ik een pagina met scaffolding gemaakt en kwam erachter dat daar niet delete, maar
code:
1
action: => "destroy"
werd gebruikt.
Ik heb dit dus geimplementeerd in mijn pagina, Ik kreeg in ieder geval geen foutmelding. maar hij gooit de record ook niet weg.

Iemand enig idee?

[ Voor 0% gewijzigd door Flapp op 09-09-2006 21:22 . Reden: tags vergeten te sluiten ]

"Stilte, een gat in het geluid...."


  • messi
  • Registratie: Oktober 2001
  • Laatst online: 14-02 05:28
Ja ;)
waarschijnlijk probeer je de destroy met een get aan te roepen (in de url dus. (bijv. blaat/destroy/1)
Bij de standard scaffold gaat dit niet, je mag alleen destroyen via een post.


Zoek deze regel eens op in je controller
code:
1
2
  verify :method => :post, :only => [ :destroy, :create, :update ],
         :redirect_to => { :action => :list }


en haal dan :destroy weg.

Onze excuses voor het ontbreken van de ondertiteling.


  • Flapp
  • Registratie: December 2004
  • Laatst online: 02-01 20:16
De controller
code:
1
2
3
4
5
6
7
8
9
10
class BoekenController< ApplicationController

    scaffold :boeken
    
    def list
        @boeken= Boeken.find_all
    end
    
    
end


En de rest doe ik in een "Template"

De Template
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Untitled Document</title>
<style type="text/css">
<!--
.geenstijl
{
    background-color: #BEDEDE;
    font-family: Arial, Helvetica, sans-serif;
    font-size: 12px;
    font-weight: bold;
    color: #408080;
    border: thin solid #2C5858;
}
.style1 {color: #408080}
.style2 {color: #000000}
-->
</style>
</head>

<body bgcolor="#E6E6E6">

<h1 class="stijl1 style1">Lijst van Alle boeken</h1>
<p class="stijl1">&nbsp;</p>
<p class="stijl1">&nbsp;</p>
<p>&nbsp;</p>

<table width="100%" height="30" border="0" cellpadding="2" bordercolor="#000000" class="geenstijl">
  <tr>
    <td width="28%"><span class="style2">Naam</span></td>
    <td width="29%"><span class="style2">Auteur</span></td>
    <td width="23%"><span class="style2">Datum</span></td>
    <td width="6%">&nbsp;</td>
    <td width="5%">&nbsp;</td>
    <td width="9%">&nbsp;</td>
  </tr>
</table>

<% @boeken.each do |boeken| %>
<table width="100%" height="30" border="0" cellpadding="2" bordercolor="#000000" class="geenstijl">
  <tr>
    <td width="28%"><%= boeken.titel %></td>
    <td width="29%"><%= boeken.auteur %></td>
    <td width="23%"><%= boeken.datum %></td>
    <td width="6%"><%= link_to "Show", :action => "show", :id => boeken.id %></td>
    <td width="5%"><%= link_to "Edit", :action => "edit", :id => boeken.id %></td>
    <td width="9%"><%= link_to "Delete", {:action => "destroy", :id => boeken.id}, :confirm => "Weet u zeker dat u het boek: #{boeken.titel} wilt verwijderen?" %></td>
  </tr>
</table>
  <% end %>
</p>
<p><%= link_to "Voeg een boek toe.", :action => "new" %> </p>
<p>&nbsp;</p>
</body>

</html>

"Stilte, een gat in het geluid...."


  • messi
  • Registratie: Oktober 2001
  • Laatst online: 14-02 05:28
vervang je delete regel eens door dit:
code:
1
<%= link_to 'Delete', { :action => 'destroy', :id => boeken.id}, :confirm => 'Weet u zeker dat u het boek: #{boeken.titel} wilt verwijderen?', :post => true %>

Onze excuses voor het ontbreken van de ondertiteling.


  • Flapp
  • Registratie: December 2004
  • Laatst online: 02-01 20:16
Dankje man, het werkt!
dat is natuurlijk wegens veiligheids redenen xD

Nu kan ik weer lekker verder gaan met leren van RoR, wel dubieus dat het fout aangegeven staat in de tutorial, wel nog even een vraagje:
Waarom gaf hij bij destroy geen foutmelding maar deed hij ook niets?

[ Voor 0% gewijzigd door Flapp op 09-09-2006 22:55 . Reden: spelfoutje ]

"Stilte, een gat in het geluid...."


  • messi
  • Registratie: Oktober 2001
  • Laatst online: 14-02 05:28
Hij gaf geen foutmelding omdat de functie bestond, maar deed niets omdat ie geen post waarde kreeg.

code:
1
Boeken.find(params[:id]).destroy


Dit had wel gewerkt, omdat je nu handmatig de get waarde opvraagt, maar het is niet veilig, omdat iedereen dit aan kan roepen.

offtopic:
Volgens mij moet je model Boek heten ipv Boeken, omdat het maar een item is. Je tabel heet wel Boeken, omdat die meerdere items bevat. Meer over dit kun je lezen in het boek "agile web development with Rails", waar alles zeer duidelijk in staat uitgelegd en je leert aan de hand van een voorbeeld app (webshop) hoe je alles het beste aan kunt pakken.

[ Voor 125% gewijzigd door messi op 09-09-2006 23:10 ]

Onze excuses voor het ontbreken van de ondertiteling.


  • Flapp
  • Registratie: December 2004
  • Laatst online: 02-01 20:16
Is dat een online boek of moet ik die kopen?

"Stilte, een gat in het geluid...."


  • messi
  • Registratie: Oktober 2001
  • Laatst online: 14-02 05:28
Die moet je kopen :) (is het geld wel waard tough)

Onze excuses voor het ontbreken van de ondertiteling.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:00

crisp

Devver

Pixelated

Dit is dus serverside en hoort derhalve in Programming

Frappant ook om te zien hoe mensen aanraden de config dan maar te veranderen zodat GET's ook data kunnen manipuleren (de standard scaffold staat niet voor niets zo ingesteld), en hoe invalid en deprecated HTML-attributen gebruikt worden met een XHTML DTD notabene (en je style is een comment).

Intentionally left blank


  • messi
  • Registratie: Oktober 2001
  • Laatst online: 14-02 05:28
crisp schreef op zondag 10 september 2006 @ 02:21:
Dit is dus serverside en hoort derhalve in Programming

Frappant ook om te zien hoe mensen aanraden de config dan maar te veranderen zodat GET's ook data kunnen manipuleren
En later had ik er ook bijgezet dat het niet verstandig is om te doen plus dat ik aanraadde om dat boek te lezen, omdat het daarin goed staat uitgelegd. :|
Als je scaffolds genereerd staat het nota bene in de source.


@ hieronder :)

Onze excuses voor het ontbreken van de ondertiteling.


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 01:00

crisp

Devver

Pixelated

true, je kwam er later ook netjes op terug; dat had ik misschien ook moeten vermelden ;)

Intentionally left blank

Pagina: 1