2011-12-20 4 views
0

Я пытаюсь включить проверку в некоторые из моих моделей, но при этом, если что-то не проверяется, я получаю сообщения об ошибках «У вас есть нулевой объект, когда вы не сделали этого, ожидайте этого! »,« Возможно, вы ожидали экземпляр массива ». и «Ошибка при оценке nil.map». Взглянув на my code, я добавляю строки «validates_uniqueness_of: name» и «validates_format_of: name,: with =>/^ [A-Za-z \ d_] + $ /" сразу после строки 3, и всякий раз, когда я делаю представление, которое не подтвердило бы, я получаю ошибки.Объект Nil после проверки нового объекта

след Применение:

app/views/subreddits/new.html.haml:13:in `block in _app_views_subreddits_new_html_haml___455774545377436650_34289940' 
app/views/subreddits/new.html.haml:4:in `_app_views_subreddits_new_html_haml___455774545377436650_34289940' 
    app/controllers/subreddits_controller.rb:53:in `block (2 levels) in create' 
    app/controllers/subreddits_controller.rb:48:in `create 

'

+1

Кажется, проблема кроется в представлении. Что у вас есть в строке 13? Я думаю, что что-то зацикливается на сообщения об ошибках? – apneadiving

+0

@apneadiving - https://github.com/Chiggins/RedditClone/blob/master/app/views/subreddits/new.html.haml ... строка 13 содержит: = select ("subreddit", "link_type", @ link_types) – Chiggins

+1

ok, поэтому '@ link_types' - нуль. Как вы его устанавливаете? – apneadiving

ответ

3

В основном, на create действия контроллера, вам необходимо установить @link_types так, что, когда вы не в состоянии сохранить, вы можете оказать new шаблон правильно. Вероятно, вы должны установить значение @link_types как константу или сделать это в помощнике, чтобы сделать его DRYer.

def create 
    params[:subreddit][:created_by_id] = session[:user_id] 
    @subreddit = Subreddit.new(params[:subreddit]) 

    respond_to do |format| 
    if @subreddit.save 
     format.html { redirect_to @subreddit, notice: 'Subreddit was successfully created.' } 
     format.json { render json: @subreddit, status: :created, location: @subreddit } 
    else 
     format.html do 
     @link_types = {"link" => "link", "text" => "text", "both" => "both"} 
     render action: "new" 
     end 
     format.json { render json: @subreddit.errors, status: :unprocessable_entity } 
    end 
    end 
end 
+0

О, я понимаю, о чем вы говорите. Хотя, что вы подразумеваете под «DRYer»? – Chiggins

+0

@Chiggins DRY - это аббревиатура от Do not Repeat Yourself. Просмотрите статью в Википедии: http://en.wikipedia.org/wiki/Don%27t_repeat_yourself. – htanata

+0

А я получил, спасибо! – Chiggins

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