我曾使用 rails 脚手架自动生成表单和视图。但是现在我不得不在根 namspace 中使用带有模型的命名空间控制器。
所以,我在没有脚手架的情况下手动生成了控制器,我在使用表单时遇到了麻烦。
我想下面的代码应该为命名空间控制器生成一个表单
<%= form_for @menu do |f| %>
<div class="field">
<%= f.label :label %><br />
<%= f.text_field :label %>
</div>
<div class="field">
<%= f.label :order %><br />
<%= f.text_field :order %>
</div>
<div class="actions">
<%= f.submit %>
</div>
<% end %>
但它没有。它说
undefined method `model_name' for NilClass:Class
用脚手架生成器做 rails 似乎很容易,但如果想手动做,rails helper 方法对它们不利。
我搜索了 form_for 文档并将代码更改为
<%= form_for @menu, :url => admin_menu_path do |f| %>
然后它显示一个不同的错误
No route matches {:action=>"show", :controller=>"admin/menus"}
我的 rake 路线给出以下输出
admin_root /admin(.:format) admin/menus#index
admin_menus GET /admin/menus(.:format) admin/menus#index
POST /admin/menus(.:format) admin/menus#create
new_admin_menu GET /admin/menus/new(.:format) admin/menus#new
edit_admin_menu GET /admin/menus/:id/edit(.:format) admin/menus#edit
admin_menu GET /admin/menus/:id(.:format) admin/menus#show
PUT /admin/menus/:id(.:format) admin/menus#update
DELETE /admin/menus/:id(.:format) admin/menus#destroy
如果我错了,请纠正我,但我认为 ruby 在 Admin 命名空间中找不到模型菜单,这很明显。所以,我尝试了 ::Menu.new ,我认为它会在上层命名空间中查找,但没有结果!