Javascript with embedded ruby

Hi folks!

Im currently trying to generate diagrams with a js lib and rails. It
doesn’t work, though, since I can’t figure out how to embed ruby code to
supply the diagrams with data. My editor highlights the ruby code
weirdly,
too, with I take as a hint for wrong ruby syntax.
The diagrams work if I use the pure-js sample data, but it REALLY dont
want to input data sets with 200 items by hand.

The snippet in question is this one, it lives in an .html.erb file:

var hour = [
<% @raw.each do |raw| %>
[ <%= if raw.status == “aufgewacht” %>
<%= Time.parse(raw.timestamp).wday.to_json %>,
<%= raw.timestamp[15,2].to_json %>
<% end %> ],
<% end %>
];
(yeah, pretty ugly)

Some error messages; line 20 contains the “if”-conditional
…/app/views/processed_data/_scatter.html.erb:20: syntax error,
unexpected ‘)’, expecting keyword_then or ‘;’ or ‘\n’
…nd= ( if raw.status == “woke” );@output_buffer.safe_concat(’

app/views/processed_data/_scatter.html.erb:23: syntax error, unexpected
keyword_end, expecting ‘)’
…ffer.safe_concat(’ '); end ;@output_buffer.safe_concat(…

Does anyone know how to do this?

Marco Antonio A. wrote in post #1183823:

Hi Rynn,

On Mon, Jun 6, 2016 at 12:15 AM Rynn S. [email protected]
wrote:

The snippet in question is this one, it lives in an .html.erb file:

var hour = [
<% @raw.each do |raw| %>
[ <%= if raw.status == “aufgewacht” %>

It seems that your problem is here. You don’t want to output the if
condition so you should actually have:

<% if raw.status == “aufgewacht” %>

Thank you! That does indeed get rid of the error messages. I wonder how
i missed this.
However, the code still doesnt work - there is no data displayed.

Maybe the syntax highlighting makes it a bit clearer. Compare the two
attached snippets, one with the js/erb code (with a working var hour
below it, to demontrate that the js is (probably) not the problem, and
some reguler embedded ruby without js. note especially how in the first
one at line 19, the ‘@’ of ‘@raw.each’ is white instead of blue, which
is wrong for an instance variable.

I also tested in the rails console that the erb indeed returns values
within range, so that shouldnt be a problem, either.

Hi Rynn,

On Mon, Jun 6, 2016 at 12:15 AM Rynn S. [email protected]
wrote:

The snippet in question is this one, it lives in an .html.erb file:

var hour = [
<% @raw.each do |raw| %>
[ <%= if raw.status == “aufgewacht” %>

It seems that your problem is here. You don’t want to output the if
condition so you should actually have:

<% if raw.status == “aufgewacht” %>

var hour = [
i missed this.

You may be getting tripped up by the fact that raw() is a view helper
method, and you are using it within your block as a local variable. Try
a different word, and see if that makes any difference.

Walter

Walter D. wrote in post #1183825:

var hour = [
i missed this.

You may be getting tripped up by the fact that raw() is a view helper
method, and you are using it within your block as a local variable. Try
a different word, and see if that makes any difference.

Walter

Thanks for your input!

Unfortunately it didnt solve my problem, but I finally figured it out:

I had a newline character appended to my status variable, so raw.status
could never equal “aufgewacht”. It does, though, with raw.status.chomp!