我正在尝试为嵌套资源创建表单。这是我的路线:
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
都包含正确类的实例。
例如,正确生成的路径也是这样使用的,所以我不认为它们是路径或网址助手的问题。
<%= website_domains_path(1) %>
<%= website_data_source_path(1, 1) %>
Rails 2.3.5
答案 0 :(得分:1)
我刚试过:
<% 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| %>
答案 1 :(得分:1)
您可以使用
<%= form_for [@website, @domain] %>
@domain
属于@website
答案 2 :(得分:0)
当它最终点击时,这是如此明显,我有一个名为respond_to
的字段。它当然超越了现有的方法。
令人遗憾的是,当数据库列覆盖已定义的方法时,ActiveRecord不会发出警告......