Problem z usunieciem komentarza

Witam,
Z filmiku, gdzie koles projektuje bloga w 15 min jest jeden kontroler Article, ma 2 modele article i komment.
Gdy tworzy nowy komentarz ma tak
metode - admin_controller.rb
def comment
Article.find(params[:id]).comments.create(params[:comment])
flash[:notice] = “Dodano twój komentarz.”
redirect_to :action => “show”, :id => params[:id]
end

oraz w widoku - show.rhtml
<%= form_tag :action => “comment”, :id => @article %>
<%= text_area “comment”, “description”, :rows => 10, :cols => 65 %>
<%= submit_tag “Dodaj komentarz!” %>

Teraz pytanie brzmi czy moge uzywac controllera (‘article’), aby przykladowo usunac jakis wybrany komentarz?
Probowalem dodac metode podobna do tej powyzej, ktora dziala

def delete_comment
Article.find(params[:id]).comments.delete(params[:comment])
redirect_to :action => ‘show’
end

a w widoku cos takiego:

<%= link_to ‘Usuń’, { :action => ‘delete_comment’, :id => comment }, :confirm => ‘Czy na pewno chcesz usunąć ten komentarz?’, :method => :delete %>
(tutaj probowalem roznych sposobow, ale tych zlych pewnie:) )

Wyskakuje mi blad
Couldn’t find Article with ID=3829
i to jest ID koentarza, a nie samego artykulu. W db mam tabele comments a w niej min id i article_id. Czytalem cos na ten temat w agile wyd 2
ze sa to zagniezdzone zasoby i tam w przykladzie autor dodaje controller comments.

pytam, czy musze utworzyc drugi controller czy mozna tak jak przy dodaawaniu komentarza jakos zrobic?
Z gory dzieki

Ty tak poważnie?

link_to ‘Usuń’, { :action => ‘delete_comment’, :id => comment }
Article.find(params[:id])

Wyskakuje mi blad
Couldn’t find Article with ID=3829
i to jest ID koentarza, a nie samego artykulu.

No bez jaj…

jak generowales to jakna filmiku z automatu to masz odpowiedzi w koltrolerze i widoku do komentarzy ;]

Nie generowalem controllera dla komentarzy, dlatego pytalem czy to robic;)

“Article.find(params[:id]).comments.delete(params[:comment])” ta linie napisalem bo myslalem, ze tutaj blad i ktos mnie poprawi jak wyciagnac komentarz,a nie artykul
cos ala
"Comment.find(params[:id].delete(destroy_… etc
ale widze ze Tomash sie wymadrza, a nic dokladnie nie odpowiedzial.

no bez jaj! daruj sobie takie odpowiedzi, forum = pomagac, wspolpracowac, a nie sie nasmiewac:)
Ps. to jak widzisz jest dzial dla “zielonych” wiec swoje uwagi dla siebie…

Spróbuję pomóc (2 lata temu też mnie ktoś zjechał za banalne pytanie więc Cię rozumiem :wink: )

[quote=666bialy666]Witam,
Z filmiku, gdzie koles projektuje bloga w 15 min jest jeden kontroler Article, ma 2 modele article i komment.
Gdy tworzy nowy komentarz ma tak
metode - admin_controller.rb
def comment
Article.find(params[:id]).comments.create(params[:comment])
flash[:notice] = “Dodano twój komentarz.”
redirect_to :action => “show”, :id => params[:id]
end

oraz w widoku - show.rhtml
<%= form_tag :action => “comment”, :id => @article %>
<%= text_area “comment”, “description”, :rows => 10, :cols => 65 %>
<%= submit_tag “Dodaj komentarz!” %>

[/quote] Jak widzisz tu :id=>@article do akcji comment przekazywany id obiektu @article czyli metoda Article.find(params[:id]) znajduje article o id params[:id]

[quote=666bialy666]Teraz pytanie brzmi czy moge uzywac controllera (‘article’), aby przykladowo usunac jakis wybrany komentarz?
Probowalem dodac metode podobna do tej powyzej, ktora dziala

def delete_comment
Article.find(params[:id]).comments.delete(params[:comment])
redirect_to :action => ‘show’
end

a w widoku cos takiego:

<%= link_to ‘Usuń’, { :action => ‘delete_comment’, :id => comment }, :confirm => ‘Czy na pewno chcesz usunąć ten komentarz?’, :method => :delete %>
(tutaj probowalem roznych sposobow, ale tych zlych pewnie:) )[/quote]
teraz w widoku przekazujesz :id=>comment czyli id obiektu comment a w kontrolerze robisz Article.find(params[:id]) czyli szukasz article który ma id taki jak ma comment

[quote=666bialy666]Wyskakuje mi blad
Couldn’t find Article with ID=3829
i to jest ID koentarza, a nie samego artykulu. W db mam tabele comments a w niej min id i article_id. Czytalem cos na ten temat w agile wyd 2
ze sa to zagniezdzone zasoby i tam w przykladzie autor dodaje controller comments.

pytam, czy musze utworzyc drugi controller czy mozna tak jak przy dodaawaniu komentarza jakos zrobic?
Z gory dzieki[/quote]
Jeśli się dopiero uczysz to lepiej na jakiś w miarę nowych tutorialach które są krok po kroku napisane a nie na filmikach. Filmy są fajne ale nieraz autorzy robią niezłe skróty myślowe. Ja na początek polecam http://www.javapassion.com/rubyonrails/ w prawdzie bazują głównie na prazy z netbeansem ale na upartego wcale nie trzeba go używać.

Dzieki za pomoc, to teraz mysle tak, ze powinienem w kontrolerze szukac comment ktory bedzie mial id jak ma comment?

def delete_comment
Comment.find(params[:id]).delete ?? i cos? (czy zle mysle?)
redirect_to :action => ‘show’
end

[quote=666bialy666]def delete_comment
Comment.find(params[:id]).delete
redirect_to :action => ‘show’
end[/quote]
Prawie dobrze tylko że :action => ‘show’ to jest akcja która ma pokazać jakiś rekord z bazy danych, tylko że narazie nie powiedziałeś o jakim id ma być ten rekord.

def delete_comment
Comment.find(params[:id]).destroy
redirect_to :action => ‘show’, :id => // @comment // hmm?
end

to mi ladnie usuwa komentarz: ) tylko przy akcji ‘show’ szuka tego id, ktory wlasnie usunalem i teraz musze tylko tu zmienic:)

“Comment.find(params[:id]).delete” jesli mam tak to wyspuje mi, ze niezdef metoda delete.

hmm mala podpowiedz jak zrobic, aby wrocilo mi do samej akcji ‘show’ -----> tylko aby “odswiezylo” sama strone?
Ps.dzieki wielkie za lekcje: ) dobrze tlumaczysz tylko czasami jeszcze nie wiem co napisac w kodzie:)

powiem tak na sztywno zrobilem tak
redirect_to :action => ‘show’, :id => 1
efekt jaki chcialem uzyskalem:), nawet jak usune ostatniego komenta to ladnie odswiez strone:)

dzieki za wiare, pomoc
pozdrawiam i najelpszego w nowym roku!

jednak to nie dziala tak jakbym chcial;/
bo jesli usuwam komentarz z artykulu innego niz o id =1, np z artykulu o id =12 to usuwa mi komentarz, ale od razu przechodzi mi do widoku ‘show/1’
a ja bym chcial aby bylo ‘show/12’.

:action => ‘show’, :id => ??

  redirect_to :action => 'show', :id => params[:id]

Poczytaj może trochę więcej o ruby on rails zanim zaczniesz dalej pisać. Najlepiej kup jakąś książkę (Agile?) i spróbuj iść z nią krok po kroku. Bo wygląda na to, że w tej chwili programujesz po omacku - dobrze by było to uporządkować.

a patrzyles jak mam wyzej napisane metody i widoki? chyba nie bo jesli napisales tak

to mi szuka po artykule id. a wtedy go nie znajdzie:) i wtedy wywali blad
Couldn’t find Article with ID=x

<%= link_to 'Usuń', { :action => 'delete_comment', :id => comment , :article_id=>@article}, 
:confirm => 'Czy na pewno ?', :method => :delete %>
redirect_to :action => 'show', :id => params[:article_id]

I naprawdę zalecane przejrzenie jakiegoś tutorialu lub książki