2010-07-28 5 views
0

Вот мой index.html.erb:Rails действие не делает

<%= 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.

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

ответ

1

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

<%= render 'new' %> 

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

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

0

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

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

Смежные вопросы