ruby on rails - Rails4 Action Controller - undefined method 'length' for nil:NilClass -


i'm building messaging system scratch 1 of projects. working had following error: nomethoderror in messagescontroller#index followed undefined method 'length' nil:nilclass. couldn't find answer correspond case, unfortunately.

i give conversations_controller.rb, messages_controller.rb, models , routes (and logs):

conversations_controller.rb

class conversationscontroller < applicationcontroller   before_action :authenticate_user!    def index     @users = user.all     @conversations = conversation.all   end    def create     if conversation.between(params[:sender_id], params[:recipient_id]).present?       @conversation = conversation.between(params[:sender_id], params[:recipient_id]).first     else       @conversation = conversation.create!(conversation_params)     end     redirect_to conversation_messages_path(@conversation)   end    private    def conversation_params     params.permit(:sender_id, :recipient_id)   end  end 

messages_controller.rb :

class messagescontroller < applicationcontroller    def index     if @messages.length > 10       @over_ten = true       @messages = @messages[-10..-1]     end     if params[:m]       @over_ten = false       @messages = @conversation.messages     end     if @messages.last       if @messages.last.user_id != current_user.id         @messages.last.read = true;       end     end     @message = @conversation.messages.new   end    def new     @message = @conversation.messages.new   end    def create     @message = @conversation.messages.new(message_params)     if @message.save       redirect_to conversation_messages_path(@conversation)     end   end    private    def message_params     params.require(:message).permit(:body, :user_id)   end end 

conversation.rb :

class conversation < activerecord::base   belongs_to :sender, foreign_key: :sender_id, class_name: 'user'   belongs_to :recipient, foreign_key: :recipient_id, class_name: 'user'    has_many :messages, dependent: :destroy    validates_uniqueness_of :sender_id, scope: :recipient_id    scope :between, -> (sender_id,recipient_id)     where("(conversations.sender_id = ? , conversations.recipient_id = ?)             or (conversations.sender_id = ? , conversations.recipient_id = ?)",             sender_id,recipient_id, recipient_id,sender_id)     end end 

message.rb :

class message < activerecord::base   belongs_to :conversation   belongs_to :user    validates_presence_of :body, :conversation_id, :user_id    def message_time     created_at.strftime("%m/%d/%y @ %l:%m %p")   end end 

routes.rb :

rails.application.routes.draw    'messages/index'    'messages/new'    'conversations/index'    'dashboard/index'    'dashboard/trips'    'dashboard/messages'    "welcome/index"    resources :conversations     resources :messages   end    devise_for :users    authenticated :users     root to: 'dashboard#index', as: :authenticated_root   end    root "welcome#index" end 

here, logs:

started "/conversations/5/messages" ::1 @ 2016-11-13 16:45:38 +1030 processing messagescontroller#index html   parameters: {"conversation_id"=>"5"} completed 500 internal server error in 5ms (activerecord: 0.0ms)  nomethoderror (undefined method `length' nil:nilclass):   app/controllers/messages_controller.rb:4:in `index'     rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/_source.erb (3.7ms)   rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (2.1ms)   rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (1.7ms)   rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/actionpack-4.2.6/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb within rescues/layout (53.1ms)   rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/web-console-2.3.0/lib/web_console/templates/_markup.html.erb (0.5ms)   rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/web-console-2.3.0/lib/web_console/templates/_inner_console_markup.html.erb within layouts/inlined_string (0.3ms)   rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/web-console-2.3.0/lib/web_console/templates/_prompt_box_markup.html.erb within layouts/inlined_string (0.4ms)   rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/web-console-2.3.0/lib/web_console/templates/style.css.erb within layouts/inlined_string (0.3ms)   rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/web-console-2.3.0/lib/web_console/templates/console.js.erb within layouts/javascript (40.4ms)   rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/web-console-2.3.0/lib/web_console/templates/main.js.erb within layouts/javascript (0.4ms)   rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/web-console-2.3.0/lib/web_console/templates/error_page.js.erb within layouts/javascript (0.7ms)   rendered /users/justine/.rvm/gems/ruby-2.3.0/gems/web-console-2.3.0/lib/web_console/templates/index.html.erb (91.6ms) 

i hope helpful , able find answer :)

cheers

the @messages instance variable in messagescontroller not set. need initialize first current_user.messages:

  def index     @messages = current_user.messages # or      if @messages.length > 10       @over_ten = true       # ... 

Comments

Popular posts from this blog

php - How to display all orders for a single product showing the most recent first? Woocommerce -

asp.net - How to correctly use QUERY_STRING in ISAPI rewrite? -

angularjs - How restrict admin panel using in backend laravel and admin panel on angular? -