Czy mozna zagnieździć kod Rails/Ruby w JavaSript

Mam ładny plugin do jquery wyświetlający zdjęcia z opisem.
Fragment kodu wygląda mniej więcej tak:

[code]var ImageInformation = [

{
author:‘Jan Kowalski’,
date:‘24.12.2011’,
camera:‘Pentax K-7’,
lens:‘SMC 1.7/50’
}

][/code]
I jak się domyślacie, chodzi mi o to, że podane tutaj dane były pobierane z bazy danych i tak spreparowany js dopiero wysyłany do przeglądarki.
Być może nie potrafiłem zadać właściwego pytania wujkowi google, jedyne co udało mi się uzyskać po wielu eksperymentach to wyplucie przez aplikację błędu:

undefined local variable or method ‘information’

w rekacji na moje wstawki próbujące wyciągnąć dane z bazy typu:

author:<%= information.author %>,

Pytanie brzmi: czy w ogóle jest to możliwe i jeśli tak, to z której strony to ugryźć.

Wydaje mi się, że masz na myśli respond_to :js w kontrolerze, ale z drugiej strony nie określiłeś, co chcesz zrobić z tym dalej - czy zagnieździć w html, czy też użyć do przetwarzania danych (jak choćby autocomplete z jQuery).

A podany błąd po prostu oznacza, że nie zadeklarowano wcześniej takiej zmiennej, zresztą sama nazwa na to wskazuje…

zrob w akcji w kontrolerze zmienna:

def action @information = Information.last end
a potem w widoku:

<script> var ImageInformation = [ { author:'<%= @information.author %>', date:'<%= @information.date %>', camera:'<%= @information.camera %>', lens:'<%= @information.lens %>' } ] </script>

ja natomiast uważam, że chcesz gdzieś w widoku wygenerować kod javascriptowy i go wrzucić na stronę. Polecam w taki sposób (zakładam, że korzystasz z erba):

[code]

<%= yield(:head) %>

[/code] a w widoku: [code]<%= content_for(:head) do %> var ImageInformation = [

{
author:<%= information.author %>,
date:‘24.12.2011’,
camera:‘Pentax K-7’,
lens:‘SMC 1.7/50’
}

]
<%- end %>[/code]

Tak, wiem, nie znam jquery ani javascriptu.
Ten kod jest osadzony w html’u, i jeśli zostawię domyślne wbite na sztywno stringi typu ‘Jan Kowalski’ to wszystko ładnie działa, ale oczywiście skrypt w opisie zdjęcia wyświetla ‘Jana Kowalskiego’ jako string a nie danę pobraną z bazy.
Pytanie ciągle pozostaje to samo: czy mogę wstawiać w kod javascript kod ruby/rails?
Po wstawieniu w zwykłego html’a

<%= information.author %>

wyświetla się prawidłowo dana pobrana z bazy, czyli np. ‘Zygmunt Malinowski’
Rozumiem, że może wychodzić tutaj moja nieznajomość javascriptu i jquery, dlatego chciałbym, by mnie ktoś pokierował w odpowiednim kierunku, np stwierdzeniem:
“Można to zrobić, ale osadzenie danych pobranych z bazy w javascriptcie wygląda inaczej niż w zwykłym html’u, zainteresuj się gemem x/przeczytaj podstawy javascript-jquery/rails-jquery”
albo
“Nie można bezpośrednio zrobić tego jak chcesz, trzeba obejść to z wykorzystaniem XYZ”
albo
“Nie można bezpośrednio zrobić tego jak chcesz, trzeba najpierw zadeklarować i przypisać zmienne, odczytać dane, i dopiero przekazać do javascripta za pomocą XYZ”

Ok, dzięki za odpowiedzi, w trakcie pisania postu pojawiły się dodatkowo 2 podpowiedzi, jutro powalczę i powiem jak mi poszło :slight_smile:

cos takiego mniej wiecej:

<%= image_tag '...', data: { author: '...', date: '...', camera: '...', lens: '...' } %>
var ImageInformation = [$('img').data()];

w haml mozesz wlaczyc tryb erb i tez cos takiego stworzyc strasznego

:erb
alert(’<%= @post.id %>’)

np

Jeszcze nie zdążyłem sprawdzić wszystkiego.
Cały kod do wyświetlania jest zawarty w js pluginu, to ładowane jest w strony
Po załadowaniu strony wyświetla się obrazek z wypisanymi danymi, w nie ma kodu.
I tak bym chciał to zostawić, bo za słaby jestem w js żeby wyciagać teraz z niego zaszyty gdzieś html w osobny plik html.erb i zmienić działanie skryptu.
Pytanie ciągle więc pozostaje to samo: czy mogę to osiągnąć nie wychodząc z poziomu kodu js pluginu

Rozwiązanie z :

<%= yield(:head) %>

nie działa w moim przypadku, zdążyłem sprawdzić wczoraj, ciągle mam błąd undefined local variable or method

[quote=gotar]w haml mozesz wlaczyc tryb erb i tez cos takiego stworzyc strasznego

:erb
alert(’<%= @post.id %>’)

np[/quote]
O, zmienił mi się komunikat błędu :slight_smile: :

undefined method `author’ for nil:NilClass

OK.
Sprawa rozwiązana, dziękuję wszystkim za odpowiedzi, szczególnie koledze krzyzak i debosh, których to podpowiedzi uzmysłowiły mi moje błędy i nakierowały na rozwiązanie i uzmysłowiły konieczność lekkiej przebudowy layoutu strony i niewielkich zmian które musiałem dokonać w pluginie.
Generalnie musiałem wyciągnąć fragmenty tego js z i wstawić do , wtedy dopiero zaczęło to zachowywać się przewidywalne.
W każdym bądź razie w końcu to działa tak jak chciałem :slight_smile:

No to chyba rozumiesz. Masz gdzies nil i probujesz na nil sprawdzic wartosc author.

A tak, Tobie też dziękuję. Plugin składał się z kilku plików js i niefrasobliwie zmieniłem nazwę jednego z nich i zapominałem zmienić odwołania do niego.
Stąd wylazł ten nil.
:slight_smile:
Teraz się wyspałem, 3 kawy + wasze porady i jest dobrze :slight_smile: