Существует контроллер сообщений:неопределенный метод `model_name» для ноль: NilClass
class MessagesController < ApplicationController
before_filter :load_chat
def index
@messages = @chat.messages
end
def create
@message = @chat.messages.build(params[:message])
if @message.save
redirect_to @chat, notice: "Message sent"
else
render :new
end
end
private
def load_chat
@chat = Chat.find(params[:chat_id])
end
end
Вот мой вид файла:
%h1 = @chat.name
= content_tag :div, id: 'messages', data: {url: chat_messages_path(@chat)} do
= render @chat.messages
%h2 New message
= render 'messages/form'
Вот мои сообщения/форма:
= simple_form_for @message do |f|
= f.input :text
= f.submit 'Send message', class: 'btn btn-success'
И, наконец, мой route.rb файл:
resources :chats, only: [:index, :show, :new, :create] do
resources :messages
end
Так что проблема в том, что я получаю сообщение об ошибке undefined method model_name for nil:NilClass
, когда я открываю чаты/показать ссылку, потому что есть визуализация формы нового сообщения. Я попытался заменить @message
Message.new
, который не выполняет эту работу, по-прежнему та же проблема. Я попробовал также удалить resources :messages
за пределами resources :chats
, что сделало трюк, но это неверно, потому что чаты имеют много сообщений и сообщений, принадлежащих чату. Вы знаете, как эта форма должна работать на меня? контроллер Чаты::
Редактировать
class ChatsController < ApplicationController
before_action :find_chat, :authenticate_user!
def index
@chats = current_user.chats
end
def show
@chat = current_user.chats.find(params[:id])
end
def new
@chat = current_user.chats.new
end
def create
@chat = current_user.chats.new chat_params
if @chat.save
flash[:notice] = 'chat asked'
redirect_to chats_path
else
render 'new'
end
end
def edit
end
def destroy
@chat.destroy!
flash[:notice] = 'chat deleted'
redirect_to chats_path
end
def update
if @chat.update_attributes chat_params
flash[:notice] = 'chat saved'
redirect_to chat_path
else
redirect_to edit_chat_path(@chat)
end
end
private
def chat_params
params.require(:chat).permit :name, :user_id
end
def find_chat
@chat = current_user.chats.find(params[:id]) if params[:id]
end
end
И мой журнал ошибок:
ActionView::Template::Error (undefined method `model_name' for nil:NilClass):
1: = simple_form_for @message do |f|
2: = f.input :text
3: = f.submit 'Send message', class: 'btn btn-success'
4: app/views/messages/_form.html.haml:1:in `_app_views_messages__form_html_haml___2629708334715527453_82911540' app/views/chats/show.html.haml:9:in `_app_views_chats_show_html_haml__2381438814653998256_88403540'
Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_source.erb (10.9ms) Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (3.9ms) Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb (3.2ms) Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/actionpack-4.2.4/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within rescues/layout (35.7ms) Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/_markup.html.erb (0.6ms) Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/_inner_console_markup.html.erb within layouts/inlined_string (0.5ms) Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/_prompt_box_markup.html.erb within layouts/inlined_string (0.5ms) Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/style.css.erb within layouts/inlined_string (0.9ms) Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/console.js.erb within layouts/javascript (23.0ms) Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/main.js.erb within layouts/javascript (0.5ms) Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/error_page.js.erb within layouts/javascript (0.5ms) Rendered /home/titas/.rvm/gems/ruby-2.2.1/gems/web-console-2.2.1/lib/web_console/templates/index.html.erb (42.8ms)
Пожалуйста, отправьте исходный код 'ChatsController' и ваш журнал ошибок. – Aetherus
@Aetherus обновлен :) –
Изменить @ chat.messages.build (params [: message]) на @ chat.messages.new (params [: message]) и simple_form_for @message do | f | to simple_form_for: message, url: ваш url do | f | –