cells-slim icon indicating copy to clipboard operation
cells-slim copied to clipboard

Rails 5.1 outputs tag helper block with escaped

Open yhatt opened this issue 7 years ago • 4 comments

We tried upgrade my rails application from 5.0.2 to 5.1.0, it uses cells 4.1.7 and cells-slim 0.0.5. and I saw a lot of escaped strings in cells components...

I guessed it is effected by new tag syntax in rails 5.1.

Rendering slim on cells

/ Traditional syntax
= content_tag :a, href: root_path
  strong Back to root page

/ New syntax on Rails 5.1
= tag.a href: root_path
  strong Back to root page

/ URL helper
= link_to root_path
  strong Back to root page

Output in Rails 5.0.2

<a href="/"><strong>Back to root page</strong></a>
<a href="/"><strong>Back to root page</strong></a>
<a href="/"><strong>Back to root page</strong></a>

Output in Rails 5.1.0

<a href="/">&lt;strong&gt;Back to root page&lt;/strong&gt;</a>
<a href="/">&lt;strong&gt;Back to root page&lt;/strong&gt;</a>
<a href="/">&lt;strong&gt;Back to root page&lt;/strong&gt;</a>

Quick-fix

As a workaround makeshift, it seems to be able to deal this problem with overriding #tag_builder private method as below. Currently we are adding this to ApplicationCell and using it as a parent cell.

class ApplicationCell < Cell::ViewModel
  private

  def tag_builder
    super.tap { |builder| builder.class_eval { include Cell::Slim::Rails } }
  end
end

But this approach have over-included unnecessary methods (e.g. for FormTagHelper). It would be great if cells-slim supports 5.1 new methods correctly.

yhatt avatar May 12 '17 02:05 yhatt

Currently #15 fixed this issue, so if you use the master branch this should be fixed.

lulalala avatar Jan 21 '18 15:01 lulalala

@lulalala Thanks for your information. However, it has not been fully fixed. I have tried the rendering example as mentioned above on master branch + Rails 5.1.6. The content_tag and link_to will work correctly, but ~~a.tag~~ tag.a will not.

<a href="/"><strong>Back to root page</strong></a>
<a href="/">&lt;strong&gt;Back to root page&lt;/strong&gt;</a>
<a href="/"><strong>Back to root page</strong></a>

We should keep using a workaround with cells-slim v0.0.5.

Unfortunately, I had decided to stop using cells and cells-slim in our new Rails project a long time ago. We want a healthy gem.

yhatt avatar Apr 02 '18 06:04 yhatt

@yhatt Just curious, what's a.tag? It's not Rails helper is it?

lulalala avatar Apr 02 '18 08:04 lulalala

@lulalala Oops, I had mistaken for tag.a. Rails 5.1 has provided a new interface of the tag helper. (https://github.com/rails/rails/pull/25543)

= tag.a href: root_path
  strong Back to root page

yhatt avatar Apr 02 '18 08:04 yhatt