【问题标题】:rails error-- undefined method `model_name' for NilClass:Classrails 错误 - NilClass:Class 的未定义方法“model_name”
【发布时间】:2013-05-25 20:48:23
【问题描述】:

我是 Rails 开发的新手。这是我的第一个应用程序。我一直在努力克服它。无论如何,这是我的问题。我的模型名称是 PostIt,我的控制器是 post_it_controller.rb

class PostItController < ApplicationController

def create
 @user = User.find(params[:id])
 @posts = Postit.create(params[:content])
 @posts.receiver_id = params[:content][:receiver_id]
 @posts.sender_id = current_user.id
end

在我看来,我在 create.html.erb 中有这个

<%= form_for(@posts) do |f| %>  
<%= f.hidden_field :receiver_id, :value => @user %>  
<%= f.label :content %>  
<%= f.text_area :content, :class => 'inputbox' %>  
<%= f.submit "Submit", :class => 'btn right' %>
<% end %>

我不断收到的错误是 NilClass:Class 的未定义方法 `model_name'

【问题讨论】:

    标签: ruby ruby-on-rails-3.2


    【解决方案1】:

    您的代码中有几处违反约定。

    1. create 操作通常在您使用 POST 请求提交表单时调用。
    2. 您的表单应以new.html.erbedit.html.erb 呈现。
    3. 您的控制器应该以复数形式命名。即PostItsController

    话虽如此,我认为错误是由于@postsnil。这可能是因为 @posts 在错误的控制器操作中被分配,因此在响应呈现表单时根本没有被分配。

    【讨论】:

    • 控制器实际上被称为 PostsIts -- 只是在这里输入的一个错字,因为我是从不同的设备上输入的。但是,是的,我肯定会把它放在新的操作中,但我真的看不出@posts 是如何在错误的控制器操作中分配的——它正在创建中,并且表单在 _create.html.erb 上。跨度>
    • @posts(或更准确地说是@post)应在呈现表单的操作中分配。 _create.html.erb 不是约定的任何部分,除了由于前导下划线而成为部分约定。在这种情况下,它会在模板中的某处使用&lt;%= render 'posts/create' %&gt; 呈现。如果您将在new 操作中分配此变量,则表单应位于posts/new.html.erb 中,或者至少呈现包含posts/new.html.erb 中的表单的部分。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多