Используйте именованные маршруты url_helper в ячейках 4 (Rails 4.2)

Я просто обновляю свой гем с 3.x до 4.1.7. Мой Gemfile выглядит следующим образом:

gem "cells-rails", "~> 0.0.8"
gem "cells-erb",   "~> 0.1.0"

Но я столкнулся с проблемой, что я не могу использовать url_helper как post_path(@post) в моем представлении ячеек. Ситуация выглядит следующим образом:

клеток /posts_cell.rb

class PostCell < Cell::ViewModel
  include ActionController::UrlFor
  include ActionView::Helpers::UrlHelper

  def show(post)
    @post = post
    render
  end
end

клеток / запись /show.erb

<article>
  <%= link_to post_path(@post) do %>
    <%= @post.title %>
  <% end %>
  <%= @post.content %>
  ....
</article>

Сообщения об ошибках

undefined method `[]' for nil:NilClass

Покопавшись глубже, я нашел обходной путь, как показано ниже:

клеток /posts_cell.rb

class PostCell < Cell::ViewModel
  include ActionController::UrlFor
  include ActionView::Helpers::UrlHelper

  delegate :url_helpers, to: "Rails.application.routes"

  def show(post)
    @post = post
    render
  end
end

И тогда вы можете использовать url_helpers, как показано ниже:

клеток / запись /show.erb

<article>
  <%= link_to url_helpers.post_path(@post) do %>
    <%= @post.title %>
  <% end %>
  <%= @post.content %>
  ....
</article>

Это решение сработало, но оно немного неловко. Есть ли другое более прямолинейное решение?


Обновить

Я создаю PostCell в консоли rails. После поиска всех методов, которые есть у PostCell, я обнаружил, что post_path - один из них. Но все равно получаю ту же ошибку.

0 ответов

Другие вопросы по тегам