There is a way to put ruby conditions inside javascript block? i.e.
javascript:
var config = {
common_value_1 : 1,
common_value_2 : 2
};
- if my_value === true # this must be a ruby condition
config.custom_true_value_1 = "1" ;
config.custom_true_value_2 = "#{my_value}" ;
- else
config.custom_false_value_1 = "1" ;
config.custom_false_value_2 = "#{my_value}" ;
Or is there another workaround at this problem? Because the ugly way that I can use its:
javascript:
var config = {
common_value_1 : 1,
common_value_2 : 2
};
- if my_value === true # this must be a ruby condition
javascript:
config.custom_true_value_1 = "1" ;
config.custom_true_value_2 = "#{my_value}" ;
- else
javascript:
config.custom_false_value_1 = "1" ;
config.custom_false_value_2 = "#{my_value}" ;
But I don't like it because if config has common values between if and else then I would duplicate my code and would be much larger and hard to maintain.
Updated with better examples
You can use a style similar to string interpolation. See example below.
** Update below **
If you want more advanced configuration I would recommend to create a class, for example
Else you also have the opportunity to create a ruby partial I've created an example below who may not be so beautiful but I works.
So my point is that there are multiple ways of doing this and you should try to find the way the one that suits you and your application the most. In my case, I would use my first example (before the update) if I just need one or two values else I would go for the class
ClientConfig
.You have 2 options:
1. Use a
ruby
sectionThis scenario is better for complex code.
I have a ruby object that I want to make a JSON. So, inside my slim file I'll create a
ruby
section:Pay attention to
html_safe
: it's important to not escape double quotes.Then you can use
myObject
insidejavascript
section:2. Use double curly braces
For simple cases, use the double curly braces inside the
javascript
section, like stated in @fphilipe answer:In pure Slim you don't have
raw
norhtml_safe
. In those cases, simply use double curly braces as documented here: