При использовании Rails и HAML я получаю ошибку: неопределенный метод `name 'для nil: NilClass - PullRequest
0 голосов
/ 14 февраля 2012

Я новичок в rails и настраиваю проект ticketee, основанный на Rails в действии 3, я пытаюсь немного отклониться и настроить haml с помощью views / projects / show.html.haml

У меня настроен Gemfile и установлен haml, и я протестировал базовую страницу haml, и она работает.

Вот моя проблема, при переносе show.html.erb в haml я получаю ошибку, которую не могу устранить.

show.html.erb:

<h1><%= @project.name %></h1>

Отображается нормально, если я перехожу на http://localhost:3000/projects/1, отображается имя проекта с идентификатором 1.

show.html.haml:

<code>%h2= @project.name

После того, как я заменил show.html.erb на haml и перешел на указанный выше URL, я получил:

NoMethodError в проектах # show

Отображение /ticketee/app/views/projects/show.html.haml где строка № 1 поднята:

неопределенный метод `name 'для nil: NilClass Извлеченный источник (вокруг строки # 1):

1:% h2 = @ project.name Rails.root: / Ticketee

Приложение Trace | Framework Trace | Полная трассировка приложение / просмотров / проекты / show.html.haml: 1: в `_App_views_projects_show_html_haml ___ 2329513113615295829_70311891362660'

schema.rb определенно имеет поле имени:

ActiveRecord::Schema.define(:version => 20120212051007) do

    create_table "projects", :force => true do |t|
        t.string   "name"
        t.datetime "created_at", :null => false
        t.datetime "updated_at", :null => false
    end

end

И мой контроллер:

class ProjectsController < ApplicationController
    def index

    end

    def new
        @project = Project.new
    end

    def create
        @project = Project.new(params[:project])
        @project.save
        #flash[:notice] = "Project has been created."
        redirect_to @project, :notice => "Project has been created."
    end

end

Полагаю, это просто недосмотр с моей стороны, так как это очень простое использование хамла.

1 Ответ

3 голосов
/ 14 февраля 2012

Похоже, у вас нет метода show внутри вашего контроллера проекта. Поскольку projects/1 означает, что это конкретная запись, вызывается страница показа. Когда вызывается /projects, вызывается метод индекса.

Возможный метод показа может быть:

  def show
    @project = Project.find(params[:id])
  end

В этом методе переменной экземпляра присваивается значение @project с идентификатором в URL. Это может быть ответом на вашу проблему!

...