Wywolanie polecen systemowych

Moj pierwszy post na forum, zatem witam wszystkich serdecznie.

Mam pytanie odnosnie wywolania polecen systemowych. Na podstawie przykładów w sieci dot. form_remote_tag.

Mam widok:

<%= form_remote_tag(:update => "my_list", :url => { :action => :add_item }, :position => "top" ) %> New item text: <%= text_field_tag :newitem %> <%= submit_tag "Add item with Ajax" %> <%= end_form_tag %> [div id="my_list"] Original item... please add more! [/div]
Kontroler:

def add_item render_text `date` end
wywolanie polecenia systemowego odbywa sie za pomoca polecenie (w tym przypadku date). Natomiast jak przekazac wartosc z formularza do “polecenie” ?

render_text `params[:newitem]`

nie dziala oczywiscie bo nie ma polecenia systemowego params[:newitem]
Chodzi mi o taka jakby konsole shellowa, z wyswietlaniem wyniku ajaxem bez odswierzania strony.

pozdrawiam

[quote=punkracy]wywolanie polecenia systemowego odbywa sie za pomoca polecenie (w tym przypadku date). Natomiast jak przekazac wartosc z formularza do “polecenie” ?

render_text `params[:newitem]`

nie dziala oczywiscie bo nie ma polecenia systemowego params[:newitem]
Chodzi mi o taka jakby konsole shellowa, z wyswietlaniem wyniku ajaxem bez odswieżania strony.[/quote]
Zapomniałeś sparsować wartość. Pewnie chciałeś zrobić:

render_text '#{params[:newitem]}'

Nie boisz się że ktoś przekaże ‘rm / -rf’ ? :slight_smile:

Dzieki, wlasnie brakowalo mi parsowania, objawia sie tu moja nieznajomosc rubiego.

Co do rm -rf / …
ogolnie chcialem zrobic tak:
mam baze danych z poleceniami i w niej wpisne np:
ls
ls -l
date

itd.
Mam w kontrolerze:

auto_complete_for :command, :cmd

w widoku:

<%= javascript_include_tag "prototype" %> <%= javascript_include_tag "scriptaculous" %> <%= text_field_with_auto_complete :command, :cmd , :skip_style => true %>
i tym samym mam pole text formularza z autocomplete z bazy danych z wpisanymi komendami. uzytkownik wybiera polecenie, sprawdzam czy aby napewno jest to polecenie z bazy danych i wykonuje je. mam tylko teraz dylemat jak polaczyc te dwa formularze:
text_field_with_auto_complete z form_remote_tag.

jakies pomysly? czytalem cos o listnerach, czy to mogloby byc rozwiazaniem?

pozdrawiam i dziekuje za tak szybka odpowiedz :slight_smile:

[quote=punkracy]Co do rm -rf / …
ogolnie chcialem zrobic tak:
mam baze danych z poleceniami i w niej wpisne np:
ls
ls -l
date

itd.[/quote]
To chyba nie jest dobry pomysł. Zamiast wywoływać powłokę, lepiej użyć wbudowanych bibliotek Rubiego. Np. puts Dir.glob(’.’) {|x| puts x} zamiast ls, lub Time.now zamiast date. Poza tym, możesz ustawić odpowiedni poziom bezpieczeństwa dla skryptów (zmienna $SAFE)

z tym, ze ls i date to byly tylko przyklady. ja musze wykorzystywac powoloke systemowa, by miec dostep do specjalnego narzedzia ktore bedzie mi zwracalo pewne wyniki, a ja bede tylko je “ladnie” przedstawial. niestety rails z pewnoscia nie ma takich funkcji. chce poprostu zbudowac taki frontend www.

moje pytanie czy jest mozliwosc form_remote_tag nadac mozliwosci auto_complete?

pozdrawiam :slight_smile:

Nie powinno byc problemow.

Witam!

[quote=punkracy]mam tylko teraz dylemat jak polaczyc te dwa formularze:
text_field_with_auto_complete z form_remote_tag.[/quote]
Tak miedzy nami to formularz jest jeden - form_remote_tag, a w nim uzywasz text_field_with_auto_complete.
Mam dokladne rozwiazanie Twojego problemu w jednym z formularzy, oto recepta:

[code=ruby] view:

<%= form_remote_tag(:url => {:action => “add”}) -%>
STH TO ADD:

<%= text_field_with_auto_complete(:model, :name, :class => “input-field”, :skip_style => true) -%>


<%= submit_tag “ADD” -%>
<%= end_form_tag %>[/code]
Dziala to bardzo dobrze z jednym wyjatkiem:
proba zastapienia div-a z polem autocomplete za pomoca wywolania ajax zazwyczaj konczy sie wylozeniem przegladarki :frowning:
jesli jakas akcja ma zmieniac w formularzu zawartosc pola text_field_with_auto_complete, musisz uwazac i zmieniac tylko pole input z okreslonym id, nie zas

pozdrawiam

Jak sie okazalo w testach rozwiazanie, ktore podal Marcin jest w pelnie prawidlowe ale pojawia sie problem przy probie zamiany i elementu sth_to_add i model_name
Dopiero element obejmujacy te po wyrzuceniu poza form (nie wiem czy to jest konieczne) daje sie podmienic bez problemow.
Rozumiem dlaczego podmiana model_name moze wywolywac problemy (observer) ale dlaczego sth_to_add.
Moze ktos wie dlaczego taki problem ma miejsce.