2015-01-07 2 views
1

Я новичок в Ruby и Rails, исходя из Java и Playframework.uninitialized constant UrlsController :: Url

Я следую учебник http://www.sitepoint.com/building-your-first-rails-application-views-and-controllers/

Я получаю сообщение об ошибке на линии @shortened_url = Url.new

Ошибка:

NameError in UrlsController#new 
uninitialized constant UrlsController::Url  

Я чувствую, что это что-то вроде ClassNotFoundError в Java? ? не уверен ... кто-нибудь знает, что я должен делать. Это в основном вопрос использования include или require, с правильной ссылкой.

Извинения за общий вопрос newb, но я нахожу его намного легче учиться, делая ошибки и делая ошибки, это прилипает - и я считаю, что другие тоже принесут пользу.

class UrlsController < ApplicationController 
    def new 
    @shortened_url = Url.new 
    end 

    def create 
    @shortened_url = Url.new(params[:url]) 
    if @shortened_url.save 
     flash[:shortened_id] = @shortened_url.id 
     redirect_to new_url_url 
    else 
     render :action => "new" 
    end 
    end 

    def show 
    @shortened_url = Url.find(params[:id]) 
    redirect_to @shortened_url.url 
    end 

end 
+1

У вас есть класс «Url»? Где находится файл с исходным кодом класса Url? И что это за файл? –

+1

Добавьте 'require 'uri'' где-нибудь перед вызовом' Url # new'. – mudasobwa

+0

Спасибо @mudasobwa, это не сработало - хотя мне кажется, что это должно быть – Ankur

ответ

6

Может или не может быть вопросом вы испытываете, но Url это зарезервированное слово в Rails.

Источник: http://bparanj.blogspot.co.uk/2011/07/reserved-words-in-rails.html

С другой стороны, это странно, что вызов Url.new звонит new на вашем UrlsController вместо Url модели. Это подтверждает мою идею использования зарезервированных слов, это часто может вызывать странное поведение.

Редактировать: О, и похоже, что из другого комментария у вас нет модели Url. Вам понадобится один из них, прежде чем вы сможете называть его .new. Тем не менее, не создавайте модель под названием Url, зарезервированное слово, вероятно, вернется, чтобы укусить вас.

+0

Спасибо, я думаю, что это пытается использовать класс/функциональность Url в ROR - но на самом деле не знаю – Ankur

+0

Я вижу, что вы имеете в виду wierd, может быть, я должен попробовать другой учебник – Ankur

+1

Спасибо @Max ... Думаю, я должен делать больше чтения, был немного избыточным. Спасибо за вашу помощь – Ankur