Aplikacje nie widzi mojej zmiennej :/

Hej…

Mam w kontrolerze takie coś.

def test
@post = Post.find(params[:id])
@post.destroy
end

w widoku

<%= link_to 'Zablokuj', post, :confirm => 'Zablokować?', :method => :test %>

Klikam w to i jest zapytanie czy usunąć a potem:

The page you were looking for doesn’t exist.
You may have mistyped the address or the page may have moved.

Co robię, źle? czytam i czytam i tak jak by coś mi umykało po każdej zmianie robię touch tmp/restart.txt

Czy jak dodaje sobie jaką nową metodę muszę też wykonać jakieś polecenie z konsoli czy co :confused:

w routhers,rb mam

resources :posts (post to nazwa kontrolera)

W metodzie link_to parametr :method określa typ rządania: GET, POST, PUT lub DELETE. Poczytaj o REST
Jeśli metoda koniecznie musi nazwywać się test to

resources :posts do post 'test', :on => :member end

link_to "Zablokuj", test_post_url(post), :method => :post, :confirm => "Zablokować?"

Lepiej metode nazwać destroy i wtedy tylko w widoku

link_to "Zablokuj", post_url, :method => :delete, :confirm => "Zablokować?"

Nie musisz restartować serwera jeżeli zmieniasz pliki w trybie development, tzn jeżeli odpaliłeś serwer zwyczajnym “rails s” bez określania środowiska.

to inaczej bo chyba zle mnie zrozumiales

w kontrlolerze dalem

[code] def test3

end[/code]
w widoku mam odpowiedni plik…

http://ruby_demo.vipserv.org/posts/test3 i nie dziala …

co do

resources :posts do post 'test', :on => :member end
dla każdej metody muszę robić jakieś takie rzecz ?

post “test” dodaje ruting dla metody test a nie test3
daj sobie w routes.rb

resources :posts do post 'test', :on => :member end
Wpisz w konsoli rake routes i zobacz jakie scieżki zostały dodane do rutingu.
To załatwia w jednym kontrolerze metody: index, new, edit, create, update, destroy, show
A jak chcesz dodać metode test czy test3 to to co napisałem jest jednym ze sposobów.

Jeżeli będziesz dodawał akcje bez sensu to tak. railsy są zaprojektowane z myślą Convention over Configuration. Jeżeli chcesz działać wbrew tym konwencjom proszę bardzo, tylko wtedy nie narzekaj że musisz dużo pisać, dużo zmieniać i jeszcze nic Ci nie działa tak jakbyś chciał.

Weź książkę (tylko broń boże nie po polsku), poczytaj, poznaj pewne zasady którymi rządzi się framework i wtedy bierz się za pisanie :wink:

Ok to mam jeszcze jedno małe pytanie i wezmę się za lekturę mam w tym kontrolerze inne metody i te metody system widzi a nie ma wpisanych ich w routers.rb

pstanek@sv13 [~/rails/blog]# rake routes posts GET /posts(.:format) {:action=>"index", :controller=>"posts"} POST /posts(.:format) {:action=>"create", :controller=>"posts"} new_post GET /posts/new(.:format) {:action=>"new", :controller=>"posts"} edit_post GET /posts/:id/edit(.:format) {:action=>"edit", :controller=>"posts"} post GET /posts/:id(.:format) {:action=>"show", :controller=>"posts"} PUT /posts/:id(.:format) {:action=>"update", :controller=>"posts"} DELETE /posts/:id(.:format) {:action=>"destroy", :controller=>"posts"} root / {:action=>"index", :controller=>"posts"}
a tej jednej co ja dodałem (TESTOWO) nie ma

ps jak dodam w routers to co mi napisałeś to widzi … no ale inne sa nie wpisane a je widzi …

To co wkleiłeś załatwia linijka resources :posts (poczytaj o REST i dostępie do zasobów), ona dodaje 8 ścieżek do rutingu
Używjąc bloku dodajesz do zasobu dodatkowe ścieżki

resources posts do post "test", :on => :member end
Doda linijkę

test_post POST    /posts/:id/test(.:format) {:action=>"test", :controller=>"posts"}

Zacznij od np. http://guides.rubyonrails.org/routing.html

aż specjalnie dla Ciebie (i potomnych) przygotowałem - http://kzalewski.blogspot.com/2011/11/ruby-ruby-on-rails-101.html :smiley:

dzięki :slight_smile:

[quote=zlw]Jeżeli będziesz dodawał akcje bez sensu to tak. railsy są zaprojektowane z myślą Convention over Configuration. Jeżeli chcesz działać wbrew tym konwencjom proszę bardzo, tylko wtedy nie narzekaj że musisz dużo pisać, dużo zmieniać i jeszcze nic Ci nie działa tak jakbyś chciał.

Weź książkę (tylko broń boże nie po polsku), poczytaj, poznaj pewne zasady którymi rządzi się framework i wtedy bierz się za pisanie ;)[/quote]
E, to nie jest aż tak formalne… to nie J2E ani JBeans… spokojnie :smiley: na http://guides.rubyonrails.com można znaleść wszystko co jest potrzebne żeby zacząć.

zeby zmienne byly widoczne przez aplikacje w routhers dodajemy

match ':controller(/:action)'

wtedy np

resources posts do post "test", :on => :member end
jest nie potrzebne (chyba ze chcemy mieć inne adresy URL…

[quote=routes.rb]# This is a legacy wild controller route that’s not recommended for RESTful applications.

Note: This route will make all actions in every controller accessible via GET requests.

match ‘:controller(/:action(/:id(.:format)))’[/quote]

twój sposób będzie działał, ale tak jak mówiłem - jest niezgodny z konwencją i będzie Ci tylko później sprawiał problemy :wink: