【问题标题】:Rails: Adding record to a database drawing up errors?Rails:向数据库添加记录会产生错误?
【发布时间】:2013-06-12 14:36:33
【问题描述】:

当我尝试将记录添加到我的数据库时,我收到此错误undefined method 'model_name' for NilClass:Class。我有一个 Track 模型和一个 Home Controller,它应该有助于将记录添加到数据库中。

app/views/home/index.html.erb

<h1>Youtube Playlist Generator</h1>

<%= form_for @track do |f| %>
  <p>
    <%= f.text_field :youtube_url ,nil, :placeholder=>'Youtube Link Here' %>
    <%= f.submit %>         
  </p>
<% end %>

app/controllers/home_controller.rb

class HomeController < ApplicationController
  def index
    @track=Track.new(params[:track])
    session[:link_list] ||= []

        if params[:add] && params[:add] != ""
                session[:link_list].append(params[:add])
        end
  end 
end

但是,Rails 回击了上述错误,并提到该问题出现在 erb 文件的 line 3 中。

如果需要更多信息,请告诉我,我仍在探索 Rails (3.2.13)

【问题讨论】:

  • 表示@track在索引视图中为nil。您应该检查它是如何在HomeController.index 中初始化的

标签: ruby-on-rails ruby-on-rails-3 debugging


【解决方案1】:

您应该在HomeControllerindex 操作中设置@track 实例变量:

  @track = Track.new

【讨论】:

  • 一个后续问题,看看新的 HomeController。我需要一个 TrackController 吗?在文本字段中输入值后,它告诉我有uninitialized constant TracksController
  • 是的,一开始我没有注意到。如果将Track 类的对象传递给form_for,此方法将默认搜索TracksController。答案是肯定的,您应该至少使用create 操作来构建TracksController
  • 好吧,如果我理解正确的话,我会创建一个 TracksController 类,然后它会有一个创建方法,我会在该方法下调用Track.new(params[:track]),那么@987654332 的意义何在@HomeController 下?
  • 初始化Track 实例以便将其传递给form_for 助手。多亏了这一点,form_for 将自动创建正确的表单(包括 url)来创建 Track
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多