【问题标题】:simple_form_for undefined method `model_name' for NilClass:Classsimple_form_for NilClass:Class 的未定义方法“model_name”
【发布时间】:2012-05-14 04:50:06
【问题描述】:

在构建基本表单以创建新数据时收到以下错误。当我点击提交时,我得到了

simple_form_for NilClass:Class 的未定义方法 `model_name'

**_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 %>

我在这里有点迷茫,因为我遵循了 Rails 命名约定,甚至用脚手架尝试过,结果相同。已经重新启动了webrick。帮忙?

【问题讨论】:

    标签: ruby-on-rails simple-form


    【解决方案1】:

    您要求simple_form_for(@calls)

    然而你的控制器正在创建@call

    你应该改变

    <%= simple_form_for(@calls) do |f| %>
    

    <%= simple_form_for(@call) do |f| %>
    

    【讨论】:

      【解决方案2】:

      假设您在控制器中设置@call,我相信您需要将其传递给部分。请参阅本页第 3.4.4 部分:http://guides.rubyonrails.org/layouts_and_rendering.html#using-partials

      标签应如下所示:

      <%= render :partial => "form", :locals => { :calls=> @calls} %>
      

      【讨论】:

        【解决方案3】:

        我认为您必须在控制器中定义一个“新”方法。只需创建一个新的空实例并将其返回给视图。

        def new
             @call = Call.new
        end
        

        “create”方法是对 POST 操作的响应,当您发回包含内容的表单时。然后根据收到的参数创建一个新实例并将其保存到数据库中。

        【讨论】:

          猜你喜欢
          • 2011-12-30
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多