rails简单小问题
控制器名字Admin,模型Product。在控制器里写了七个默认行为,控制器new的action:
class AdminController < ApplicationController
def new
@product = Product.new
respond_to do |format|
format.html
end
end
end
但在手写视图new.html.erb
(如下代码
<h1>新建产品</h1>
<% form_for(@product) do |f| %>
<%= f.error_messages %>
<p>
<%= f.label :title %><br/>
<%= f.text_field :title, :size => "20" %>
</p>
<p>
<%= f.submit '创建' %>
</p>
<% end %>
<%= link_to "显示", admin_index_path %>
)
浏览器报第二行错误。
Showing app/views/admin/new.html.erb where line #2 raised:
undefined method `products_path' for #<ActionView::Base:0x7ff0d36141a0>
Extracted source (around line #2):
1: <h1>新建产品</h1>
2: <% form_for(@product) do |f| %>
3: <%= f.error_messages %>
4: <p>
5: <%= f.label :title %><br/>
我郁闷,找了好久也没找到,就因为是自己手敲?但自己检查了也没什么小错误呀!
还有,我的index那个路由的具名路由不是admin,而是admin_index。我记得脚手架生成应该是复数的admin阿?
[解决办法]
<% form_for(@product) do |f| %> 是用默认提交地址来指定url。
如果你没有在router中添加规则,则需指明具体行为,比如
<% form_for :product, @product, :url=> {:controller => "admin", :action => "new"}