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|