2012-03-05 2 views
0

В моем заголовке пользователи могут добавлять «элемент» через форму. Я хочу, чтобы эта опция будет доступна на каждой странице, поэтому у меня в заголовке:Rails Header: как установить форму?

<%= form_for(@item) do |f| %> 

      <div> 
       <div class="title"><%= f.label :name, "Name" %></div> 
       <div class="champ"><%= f.text_field :name %></div> 
      </div> 

      <div> 
       <%= f.submit "add this item" %> 
      </div> 
<% end %> 

Но это заставляет меня, чтобы добавить это в каждом контроллере:

def action 
    @item = Item.new 
end 

Как я могу избежать этого? Использование контроллера приложений?

Спасибо!

ответ

1

Определите метод в контроллере приложения и используйте before_filter.

class ApplicationController < ActionController::Base 
    .. 
    before_filter :initialize_item 

    def initialize_item 
    @item = Item.new 
    end 
end 

метод initialize_item будет выполнен по каждому запросу.

+0

отлично, спасибо! – Maxxx

+0

@Maxxx Если это работает для вас, то разве вы не хотите принимать в качестве ответа? –

1

Вы можете сделать это:

<%= form_for(Item.new) ... 

Но если элемент является недействительным, то форма будет пустой (так как вы создать новый элемент для формы, а не с помощью одного укажи со значениями и подкрепленной вашим контроллер). Вы можете попробовать:

<%= form_for(@item || Item.new)... 
Смежные вопросы