这是我的控制器:
class TalentController < ApplicationController
def index
end
def new
@talent = Talent.new
end
def create
@talent.update_attributes!(params)
end
end
这是我的app / views / talent / new.html.haml:
= "Create new talent"
= form_for @talent, :url => {:action=>:create, :controller=>"talent"}, :method => :post do |f|
= f.label :First_Name
= f.text_field :first_name
= f.label :Last_Name
= f.text_field :last_name
= f.label :City
= f.text_field :city
= f.label :State
= f.text_field :state
= f.label :Zip_code
= f.text_field :zip_code
= f.submit "Create"
当我点击创建按钮时,我收到此错误。
No route matches [POST] "/talent/new"
这是我的佣金路线:
/ {:action=>"index", :controller=>"talent"}
talent_index GET /talent(.:format) {:action=>"index", :controller=>"talent"}
POST /talent(.:format) {:action=>"create", :controller=>"talent"}
new_talent GET /talent/new(.:format) {:action=>"new", :controller=>"talent"}
edit_talent GET /talent/:id/edit(.:format) {:action=>"edit", :controller=>"talent"}
talent GET /talent/:id(.:format) {:action=>"show", :controller=>"talent"}
PUT /talent/:id(.:format) {:action=>"update", :controller=>"talent"}
DELETE /talent/:id(.:format) {:action=>"destroy", :controller=>"talent"}
我在这里想念的是什么?
答案 0 :(得分:0)
我不知道表单试图发布到new
的原因。但是,您的代码有一些改进。首先,没有必要将:url
和:method
传递给form_for
。你唯一需要的是:
= form_for @talent do |f|
Rails会自动处理剩下的事情。
控制器的create
方法中的代码不正确。调用create
时,它是一个新请求,因此@talent
将是未定义的。你必须先设置它。第二个错误是您正在使用update_attributes
,它用于更新数据库中的现有记录。您想要创建新记录,因此必须使用create
。另一种方法是简单地创建Talent
的新实例并在其上调用save
。
所以,它应该是这样的:
def create
@talent = Talent.create(params[:talent])
end
或者像这样:
def create
@talent = Talent.new(params[:talent])
if @talent.save
# Saved successfully, do a redirect or something...
else
# Validation failed. Show form again so the user can fix his input.
render :action => 'new'
end
end