2012-12-16 50 views
0

即使一切工作在本地主機上,我都會收到這個奇怪的錯誤。未定義的方法`model_name'錯誤

1) User pages profile page 
    Failure/Error: before { visit user_path(user) } 
    ActionView::Template::Error: 
     undefined method `model_name' for NilClass:Class 
    # ./app/views/shared/_create_list.html.erb:2:in `_app_views_shared__create_list_html_erb__3760252191913263716_70266394394440' 
    # ./app/views/users/show.html.erb:17:in `_app_views_users_show_html_erb__4038196524711190952_70266368588040' 
    # ./spec/requests/user_pages_spec.rb:12:in `block (3 levels) in <top (required)>' 

users_controller

class UsersController < ApplicationController 
    before_filter :signed_in_user, only: [:edit, :update] 
    before_filter :correct_user, only: [:edit, :update] 

    def show 
    @user = User.find(params[:id]) 
    @lists = @user.lists 
    @list = current_user.lists.build if signed_in? 
    end 

lists_controller

class ListsController < ApplicationController 
    before_filter :signed_in_user 

    def create 
    @list = current_user.lists.build(params[:list]) 
    if @list.save 
     flash[:success] = "List created!" 
     redirect_to current_user 
    else 
     redirect_to current_user 
    end 
    end 

_create_list局部

<div class="white-box"> 
<%= form_for(@list) do |f| %> 
    <%= render 'shared/error_messages', object: f.object %> 
    <div class="field"> 
    <%= f.text_field :name, placeholder: "Create new list..." %> 
    <%= f.submit "Create list", class: "btn btn-primary" %> 
    </div> 
<% end %> 
</div> 

用戶/顯示

<div class="span8"> 
    <% if @user.lists.any? %> 
     <h3>Lists (<%= @user.lists.count %>)</h3> 
     <ol class="lists"> 
     <%= render @lists %> 
     </ol> 
    <% end %> 
    <%= render 'shared/create_list' %> 
    </div> 

user_pages_spec

require 'spec_helper' 

describe "User pages" do 

    subject { page } 

    describe "profile page" do 
    let(:user) { FactoryGirl.create(:user) } 
    let!(:m1) { FactoryGirl.create(:list, user: user, name: "Foo") } 
    let!(:m2) { FactoryGirl.create(:list, user: user, name: "Bar") } 

    before { visit user_path(user) } 

我很新的軌道,但此錯誤一直困擾我好幾天了!任何建議都非常感謝!

回答

0

此問題是因爲您將對象分配給@list,如果用戶登錄,否則它將僅爲零。

要解決此問題添加條件if @list在(users/show

<%= render 'shared/create_list' if @list %> 
+0

工作就像一個魅力 - 非常感謝! –

相關問題