2013-05-14 3 views
0

Я запустил тестовый файл RSpec, который заполняет форму и отправляет ее. Я получаю следующее сообщение об ошибке:NoMethodError: undefined method `model_name 'для Fixnum: Class

1) Sign Up Advertiser after adding valid information should create a user 
    Failure/Error: expect { click_button submit }.to change(User, :user_key) 
    NoMethodError: 
    undefined method `model_name' for Fixnum:Class 
    # /mnt/hgfs/Projekte/adserve.example.de/app/controllers/advertisers_controller.rb:31:in `tryToCreateUser' 
    # /mnt/hgfs/Projekte/adserve.example.de/app/controllers/advertisers_controller.rb:14:in `create' 
    # ./sign_up_advertiser_spec.rb:32:in `block (4 levels) in <top (required)>' 
    # ./sign_up_advertiser_spec.rb:32:in `block (3 levels) in <top (required)>' 

Это код для контроллера:

class AdvertisersController < ApplicationController 

... 

    def home 
    @menuindex = 0 
    end 

    def create 
    @user = Advertiser.new (params[:advertiser]) 
    tryToCreateUser 
    end 

    def tryToCreateUser 
    if @user.save 
     @user = Advertiser.retrieve(@user.id) 

     redirect_to home, :notice => "You successfully signed up " + @user.full_name 
    else 
     render :action => "https://stackoverflow.com/users/new", :layout => 'application' 
    end 
    end 
end 

И это то, что routes.rb выглядит

match "signup_advertiser" => "advertisers#new", :as => "signup_advertiser" 
match "signup_publisher" => "publishers#new", :as => "signup_publisher" 

get "advertisers_home" => "advertisers#home" 

resources :advertisers 

Так что я думаю, ошибка находится в части redirect_to. Но я не могу понять. Я возился с визуализацией пользовательского действия в «доме» и некоторых других вещах. Я думаю, что это что-то довольно основное, поэтому помощь будет очень оценена. Благодарю.

+1

Будьте осторожны с вызовами метода. 'new (...)' и 'new (...)' можно интерпретировать как разные вещи. Правильный способ - избегать пробелов. – tadman

+0

oops. там хорошее место. Я думаю, что весь код просто сильно обманут ... – Nessuno

ответ

0

Да, проблема есть. Вы должны использовать дома в качестве символа по методу redirect_to:

def tryToCreateUser 
    if @user.save 
    @user = Advertiser.retrieve(@user.id) 
    redirect_to :home, :notice => "You successfully signed up " + @user.full_name 
    else 
    render :action => "https://stackoverflow.com/users/new", :layout => 'application' 
    end 
end 

Что вы делаете сейчас: redirect_to 0, так как вы на самом деле вызов метода контроллеры «домашний».

+0

О, мой бог. Я дебил. Большое спасибо, сэр. Теперь я получаю новую ошибку: NoMethodError: undefined method 'home_url 'для #AdvertisersController: 0x000000055945c0>' Я буду отмечать ваш ответ как правильный. – Nessuno

+0

Итак, запустите 'rake routes' и посмотрите, на каком пути отправлен ваш домашний метод. Возможно, вам понадобится 'advertisers_home_path' вместо': home' –

+0

: advertisers_home сделал трюк. Еще раз спасибо. – Nessuno

Смежные вопросы