Отправить форму модели с моей домашней страницы

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

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

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

person Adam    schedule 01.05.2013    source источник


Ответы (2)


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

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

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

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

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

@ссылка = Ссылка.новая

person Billy Chan    schedule 01.05.2013
comment
Спасибо Билли. Это работает! Мне интересно - создает ли это объект при запуске домашней страницы? или это только один раз я отправлю форму? Мне интересно, есть ли способ создать объект только в том случае, если форма отправлена ​​​​... если она еще этого не делает. - person Adam; 01.05.2013
comment
@ Адам, этот объект в #new (или в вашем HomeController#home) предназначен для создания формы, почти все его атрибуты равны нулю. Если вы заполните форму и отправите ее, действие публикации отправит значения того, что вы заполнили, в получатель, действие создания. #create получит эти значения из параметра для создания другого нового объекта, который вообще не имеет отношения к первому. Этот объект готов к сохранению. Обычный процесс заключается в том, что при успешном сохранении вы возвращаетесь с сообщением об успехе, в противном случае вы возвращаетесь с сообщениями об ошибках. - person Billy Chan; 01.05.2013

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

<%= form_for :link, url: your_home_path do |f| %>
person Teej    schedule 01.05.2013
comment
Спасибо, Торп, когда вы говорите свой домашний путь, вы имеете в виду корень или путь ресурса ссылки? Я попробовал link_path и home_path (у меня есть контроллер для дома), которые, похоже, не вызывали его, или это страница, с которой он вызывается? Нужно ли запускать режим с помощью link.new, как сказал Билли выше? - person Adam; 01.05.2013