我有一个名为“Notes”的控制器,它的关联模型是 Note,带有一个名为“note”的文本字段(我知道)。
我在 new.html.erb 视图中有一个非常简单的表单:
<% form_for(@note) do |f| %>
<p><%= f.error_messages %> </p>
<h2 class="productList"><label for="">Note: </label>
<%= f.text_area :note, :cols => "50", :rows => "10" %></h2>
<br />
<p><%= f.submit "Create" %></p>
<% end %>
但是,单击“提交”按钮后,被调用的操作来自完全不同的控制器:
Processing OtherController#add_note (for 127.0.0.1 at 2012-07-30 09:04:42) [POST]
请注意,尽管控制器被设置为资源,但甚至没有在 routes.rb 中定义此操作。
我在 routes.rb 中的“notes”行如下所示:
map.resources :notes, :collection => { :note_list => :get, :get_json_list => :get }, :member => { :applications => :get, :replace => :get }
并且“rake routes”为控制器产生这些行:
get_json_list_notes GET /notes/get_json_list(.:format) {:controller=>"notes", :action=>"get_json_list"}
note_list_notes GET /notes/note_list(.:format) {:controller=>"notes", :action=>"note_list"}
notes GET /notes(.:format) {:controller=>"notes", :action=>"index"}
POST /notes(.:format) {:controller=>"notes", :action=>"create"}
new_note GET /notes/new(.:format) {:controller=>"notes", :action=>"new"}
edit_note GET /notes/:id/edit(.:format) {:controller=>"notes", :action=>"edit"}
replace_note GET /notes/:id/replace(.:format) {:controller=>"notes", :action=>"replace"}
applications_note GET /notes/:id/applications(.:format) {:controller=>"notes", :action=>"applications"}
note GET /notes/:id(.:format) {:controller=>"notes", :action=>"show"}
PUT /notes/:id(.:format) {:controller=>"notes", :action=>"update"}
DELETE /notes/:id(.:format) {:controller=>"notes", :action=>"destroy"}
我的 Javascript 中的表单或控件也没有任何绑定。什么会使它调用错误的控制器和动作?
更新 - 这是 form_for 标记的输出:
<form id="new_note" class="new_note" method="post" action="/notes">
<p> </p>
<h2 class="productList">
<label for="">Note: </label>
<textarea id="note_text" rows="10" name="note_text" cols="50"></textarea>
</h2>
<br>
<p>
<input id="note_submit" type="submit" value="Create" name="commit">
</p>
</form>
更新 2 - 表单正在传递“Note.new”