Mam problem z wykonaniem następującej rzeczy. Posiadam tabele Question gdzie jest pole “open” typu boolean, teraz chciałbym aby użytkownik miał możliwość zmiany tego pola z false na true i odwrotnie. Nie chcę tworzyć całego formularza do edytowania wiersza, poczytałem że teoretycznie da się to zrobic używając link_to.
Wycinek z kontrolera :
[code] def edit_status @question = Question.find(params[:id])
if @question.open @question.open = false
else @question.open = true
end @question.open = true @question.save
end[/code]
Wycinek z widoku :
<% if question.open %>
<p> Status : Open <%= link_to "Close", root_path(:id => question.id), :action => "edit_status" %> </p>
<% else %>
<p> Status : Closed <%= link_to "Open", root_path(:id => question.id), :action => "edit_status" %> </p>
<% end %>
Kliknąć w link się da jednak nie robi on nic poza przekierowaniem na roota. Nie wykonuje on zadanej akcji. Szczerze mówiąc jestem lekko zagubiony jak to zrobić.
A dlaczego linkujesz do root_path? Bez routes.rb niewiele można powiedzieć o przyczynie - wklej jeszcze zawartość config/routes.rb albo efekt wywołania ‘rake routes’.
Ponieważ tam wyświetla się profil użytkownika i tam też zmienia się ta opcje “open”. Generalnie ten link jest na root_path i przekierowuje na root_path. Chodzi o to żeby klikając w to wykonała się akcja z kontrolera. To nie musi być link, wystarczy jakiś button. Niestety nie znam na tyle railsów żeby użyć czegoś konkretniejszego.
Edit: Dodam wypis z rake routes jak przejdę na ubuntu za jakąś godzinkę.
Nie mam 100% pewności, ze to zadziała, mogę być jakieś błedy składniowe w szczególności przy operatorzr ‘?’. Poza tym możnaby z widoku przenieść te ify do helpera. Ale moim zdaniem tak to powinno wygladac.
Nie jestem pewien, czy route bedzie dokładnie update_status_question_path, ale to możesz sprawdzic w rake routes.
[quote=sarniak]<p> Status : <%= quesion.open? ? 'Open' : 'Closed' %> <%= link_to question.opened? ? 'Closed' : 'Opened', update_status_question_path(question) %> </p>
[/quote]
Jezu. Czy został wprowadzony jakiś podatek za używanie nawiasów?
(pomijam już błędy językowe i projektowe – jedna akcja dla dwóch przeciwnych operacji, do not want)
[quote=Tomash][quote=sarniak]<p> Status : <%= quesion.open? ? 'Open' : 'Closed' %> <%= link_to question.opened? ? 'Closed' : 'Opened', update_status_question_path(question) %> </p>
[/quote]
Jezu. Czy został wprowadzony jakiś podatek za używanie nawiasów?
(pomijam już błędy językowe i projektowe – jedna akcja dla dwóch przeciwnych operacji, do not want)[/quote]
Pisałem na szybko jako rozwiązanie problemu z pierwszego posta, bo tak to mniej więcej można zrobić. Teraz jak na to patrzę, no to rzeczywiście niepotrzebnie się sugerowałem takim projektem ;).
Tylko nie rozumiem co jest złego w jednej akcji (nazwa jest niefortunna), jakby ją nazwać toggle_status - z tego co ja zrozumiałem to ma zmieniać wartość atrybutu na przeciwną, więc jak najbardziej wystarczy jedna.
EDIT: a żeby było po ładniej, to można np. tak napisać: