Ruby on rails 未定义的方法`model#u name';零级:零级

Ruby on rails 未定义的方法`model#u name';零级:零级,ruby-on-rails,ruby,activerecord,haml,simple-form,Ruby On Rails,Ruby,Activerecord,Haml,Simple Form,有一个消息控制器: 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 @cha

有一个消息控制器:

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
这是我的留言/表格:

= simple_form_for @message do |f|
  = f.input :text
  = f.submit 'Send message', class: 'btn btn-success' 
最后是我的routes.rb文件:

resources :chats, only: [:index, :show, :new, :create] do
      resources :messages
end
所以问题是,当我打开chats/show链接时,我得到了一个错误,它是nil:NilClass的
未定义的方法model\u name,因为呈现了一种新消息形式。我尝试将
@message
替换为
message。新的
不起作用,仍然存在相同的问题。我还尝试将
resources:messages
resources:chats
外部删除,这是一个技巧,但不正确,因为chats有许多消息,而消息属于chat。你知道这张表格对我有什么作用吗

编辑:聊天室控制器:

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

无法看到您在哪里声明
@message

--

错误似乎来自:

= render 'messages/form'
。。。其中:

= simple_form_for @message do |f|
--

除了在部分中使用
@instance\u变量
是不好的做法外,在这种情况下,您需要显式声明
@message
,以便识别它

实际上,我认为您可以通过将嵌套资源传递给
消息/表单
部分:

#app/views/messages/_form.html.erb
= simple_form_for [@chat, @chat.messages.new] do |f| 

(顺便说一句,所有
nilClass
错误基本上意味着您引用了一个尚未声明的变量)

请发布
ChatsController
的源代码和您的错误日志。@Aetherus updated:)将@chat.messages.build(params[:message])更改为@chat.messages.new(params[:message])对于@message do | f |的简单形式|到对于:message,url:your url do | f |的简单形式||
= simple_form_for @message do |f|
#app/views/messages/_form.html.erb
= simple_form_for [@chat, @chat.messages.new] do |f|