Каков синтаксис form_for для вложенных ресурсов? - PullRequest
2 голосов
/ 18 марта 2010

Я пытаюсь создать форму для вложенного ресурса. Вот мой маршрут:

map.resources :websites do |website|
  website.resources :domains
end

Вот мои попытки и ошибки:

<% form_for(@domain, :url => website_domains_path(@website)) do | form | %>
<%= form.text_field :name %>

# ArgumentError: wrong number of arguments (1 for 0)
# form_helper.rb:290:in 'respond_to?'
# form_helper.rb:290:in 'apply_form_for_options!'
# form_helper.rb:277:in 'form_for'

<% form_for([@website, @domain]) do | form | %>
<%= form.text_field :name %>

# ArgumentError: wrong number of arguments (1 for 0)
# form_helper.rb:290:in 'respond_to?'
# form_helper.rb:290:in 'apply_form_for_options!'
# form_helper.rb:277:in 'form_for'

<% form_for(:domain, @domain, :url => website_domains_path(@website)) do | form | %>
<%= form.text_field :name %>

# ArgumentError: wrong number of arguments (1 for 0)
# wrapper.rb:14:in 'respond_to?'
# wrapper.rb:14:in 'wrap'
# active_record_helper.rb:174:in 'error_messages_for'

<% form_for(:domain, [@website, @domain]) do | form | %>
<%= form.text_field :name %>

# UndefinedMethodError 'name' for #<Array:0x40fa498>

Я подтвердил, что @website и @domain содержат экземпляры правильного класса.

Маршруты, которые также генерируются правильно, используются, например, следующим образом, поэтому я не думаю, что они связаны с маршрутами или помощниками по URL.

<%= website_domains_path(1) %>
<%= website_data_source_path(1, 1) %>

Рельсы 2.3.5

Ответы [ 3 ]

1 голос
/ 20 марта 2010

Вы можете использовать

<%= form_for [@website, @domain] %>

Где @domain принадлежит @website

1 голос
/ 18 марта 2010

Я только что попробовал:

<% form_for @note, :url => teams_person_notes_path(@person) do |f| %>
  <%= f.text_field :note %>
  <%= f.submit "Add" %>
<% end %>

и работает без проблем. Мои маршруты выглядят так:

  map.namespace :teams do |t|
    t.resources :people do |p|
      p.resources :notes
    end
  end

То же самое, что и у вас (добавляется только пространство имен, но это не так).

Конечно, ваша примерная форма предназначена для нового объекта @domain. Это не будет работать для действия редактирования, тогда вы должны иметь:

 <% form_for @domain, :url => edit_website_domain_path(@website, @domain) do |form| %>
0 голосов
/ 18 марта 2010

Это было так очевидно, когда он наконец щелкнул, у меня было поле с именем respond_to. Это, конечно, переопределяло существующий метод.

Жаль, что ActiveRecord не предупреждает, когда столбец базы данных перезапишет уже определенный метод ...

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