Действие Rails не рендеринг - PullRequest
0 голосов
/ 28 июля 2010

Вот мои index.html.erb:

<%= render :action => 'new' %>

<% unless @posts.empty? %>
  <%= render @posts %>
<% end %>

Сообщения отображаются, но на странице new ничего нет.

В журнале тоже нет:

Processing PostsController#index (for 127.0.0.1 at 2010-07-27 20:54:28) [GET]
Post Load (0.2ms)   SELECT * FROM "posts" 
Rendering template within layouts/application
Rendering posts/index
Rendered posts/_post (8.4ms)

Также, если я заменю его просто на <%= render :new %>, я получу ошибку:

undefined method `include?' for :new:Symbol

Но это должно позволить мне неявно отрисовать действие с помощью Rails 2.3.8.

Буду признателен, если кто-нибудь сможет объяснить одну из этих вещей.

Ответы [ 2 ]

1 голос
/ 28 июля 2010

Вы должны отображать только частичные элементы в представлении. Поскольку вам нужно содержимое в нескольких представлениях, вы можете преобразовать содержимое new.html.erb в частичное (скажем, _new.html.erb), а затем

<%= render 'new' %>

Из new.html.erb, а также из index.html.erb. render: action => 'actionname' предназначен для отрисовки шаблона другого действия из контроллера.

Обратите внимание, что это общая идиома для создания частичного _form.html.erb для каждой модели, и используйте его всякий раз, когда вам нужно иметь возможность добавить или изменить экземпляр модели из другого места. Это было бы полезно и в этом случае. Затем вы должны сделать частичную форму из index, new и edit.

0 голосов
/ 28 июля 2010

Просто мысль, но я подозреваю, что erb будет рассматривать эти два блока как одну строку.Как вы, наверное, знаете, в Ruby довольно идиоматично ставить условие «если» или «если» в конце строки.

Возможно, вы захотите добавить разрыв строки перед «если», но после <%. </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...