2013-05-01 5 views
0

У меня есть модель ссылок, которая имеет все общие строительные леса, созданные для нее, однако, а не перейти на ссылку # новая страница, я хотел бы отправить форму с моей домашней страницы который заполняет новую запись.Отправить форму модели с моей домашней страницы

У меня есть только одно текстовое поле, но я не уверен, как построить форму. Я где-то читал, что вы должны указать контроллер в поле формы, но это, похоже, не работает.

<%= form_for(:link, @link) do |f| %> 
    <% if @link.errors.any? %> 
    <div id="error_explanation"> 
     <h2><%= pluralize(@link.errors.count, "error") %> prohibited this link from being saved:</h2> 

     <ul> 
     <% @link.errors.full_messages.each do |msg| %> 
     <li><%= msg %></li> 
     <% end %> 
     </ul> 
    </div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :url %><br /> 
    <%= f.text_field :url %> 
    </div> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

ответ

3

Вам не нужно указывать ничего, если вы используете маршруты по умолчанию.

Если @link - это объект, который не существует в базе данных, Rails автоматически подумает, что это форма для #new. Таким образом, действие формы будет /links и метод post, который является ресурсом по умолчанию для #create

В вашем случае, вам не нужно ничего делать, просто пересмотреть формы код:

<%= form_for(@link) do |f| %> 
.... 

Кроме того, необходимо подготовить @link объект в домашнем контроллере, что-то вроде

@link = Link.new

+0

Спасибо, Билли. Это работает! Мне интересно - это создает объект при запуске домашней страницы? или это только один раз, когда я отправлю форму? Я задаюсь вопросом, есть ли способ создать объект, если форма отправлена ​​... если она уже не делает этого. – Adam

+0

@Adam, этот объект в #new (или в вашем доме HomeController # home) предназначен для вашего здания формы, почти все его атрибуты равны нулю. Если вы заполните форму и представите, действие «пост» отправит значения того, что вы заполнили в приемнике, действие «создать». «#create» получит эти значения из param для создания другого нового объекта, который вообще не имеет отношения к первому. Этот объект готов к сохранению. Обычный процесс, если сохранить успех, вернется с успешным сообщением, если вы не вернетесь с сообщениями об ошибках. –

0

Все, что вам нужно сделать, это добавить параметр url в form_for помощник

<%= form_for :link, url: your_home_path do |f| %> 
+0

Благодаря Торп, когда вы говорите, ваш домашний путь, вы имеете в виду корень, или стезя ресурс ссылки? Я пробовал ссылку link_path и home_path (у меня есть контроллер для дома), который, как представляется, не вызывал его, или это то, из которого вызывается эта страница? Нужно ли мне инициировать режим с помощью link.new, как сказал Билли выше? – Adam

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