Print in ERB without <%=?

2019-01-22 12:21发布

问题:

Sometimes it's more convenient to print in <%%>. How to do it in Rails?

回答1:

http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-concat

Should be what you are looking for.

E.g. the following statement using concat:

<% concat "Output" %>

is equivalent to:

<%= "Output" %>


回答2:

In ERB: The <% %> signify that there is Ruby code here to be interpreted. The <%= %> says output the ruby code, ie display/print the result.

So it seems you need to use the extra = sign if you want to output in a standard ERB file.

Otherwise, you could look at alternatives to ERB which require less syntax,.. maybe try something like HAML. http://haml-lang.com/tutorial.html

Example:

# ERB
<strong><%= item.title %></strong>

# HAML
%strong= item.title

Is that more convenient?



回答3:

erb has two method to evaluate inline ruby expressions. The <% which evaluates the expression and the <%= which evaluates and prints. There is no global object to print to within the binding context.

As mentioned by Omar, there is a concat method, which is part of ActionView. This will do what you want.

Unlike a scripting language escape, there is no default output for erb. Since erb is simply a function, and given a template and binding will return a variable, it returns the values of text and functions recursively.

There is hot debate as to how much logic should be allowed in a view, but as little as possible is what most people aim for. If you are putting more code than text in the view, you may want to consider refactoring your code.