在构建基本表单以创建新数据时,我收到以下错误。当我点击提交时,我得到了
simple_form_for NilClass的未定义方法`model_name':Class
**_form.html.erb**
<%= simple_form_for(@calls) do |f| %>
<%= f.error_notification %>
<%= f.input :caller_name %>
<%= f.input :caller_phone, hint: "xxx-xxx-xxxx" %>
<%= f.input :caller_address %>
<%= f.input :primary_diagnosis %>
<%= f.error :base %>
<%= f.button :submit %>
<% end %>
**calls_controller.rb**
def create
@call = Call.new(params[:call])
respond_to do |format|
if @call.save
format.html { redirect_to @call, notice: 'Call was successfully created.' }
format.json { render json: @call, status: :created, location: @call }
else
format.html { render action: "new" }
format.json { render json: @call.errors, status: :unprocessable_entity }
end
end
end
**new.html.erb**
<h1>New Call</h1>
<%= render 'form' %>
<%= link_to 'Back', calls_path %>
我在这里有点迷失,因为我遵循了铁路命名惯例,甚至尝试使用具有相同结果的脚手架。已经重新启动了webrick。帮助
答案 0 :(得分:5)
您要求simple_form_for(@calls)
然而你的控制器正在创建@call
你应该改变
<%= simple_form_for(@calls) do |f| %>
到
<%= simple_form_for(@call) do |f| %>
答案 1 :(得分:1)
假设您在控制器中设置@call
,我相信您需要将其传递给部分。请参阅本页第3.4.4部分:http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials
标签应如下所示:
<%= render :partial => "form", :locals => { :calls=> @calls} %>
答案 2 :(得分:0)
我认为您必须在控制器中定义“新”方法。只需创建一个新的空实例并将其返回给视图。
def new
@call = Call.new
end
当您发回包含内容的表单时,“create”方法是对POST操作的响应。然后从收到的参数创建一个新实例并将其保存到数据库中。