DoubleRenderError(渲染和/或重定向,并在redirect_to或self.render末尾添加’并返回’
每次我将消息插入数据库时,我都有一个消息传递系统。 它插入重复项即时获取AbstractController::DoubleRenderError (Render and/or redirect were called multiple times in this action)
。 我尝试在redirect_to或self.render
结束时添加and return
,但它没有帮助。 它似乎是从create方法发生的问题
# app/controllers/messages_controller.rb class MessagesController < ApplicationController before_action :authenticate_user! before_action :set_conversation def index if current_user == @conversation.sender || current_user == @conversation.recipient @other = current_user == @conversation.sender ? @conversation.recipient : @conversation.sender @messages = @conversation.messages.order("created_at DESC") else redirect_to conversations_path, alert: "You don't have permission to view this." end end def create @message = @conversation.messages.new(message_params) @messages = @conversation.messages.order("created_at DESC") if @message.save ActionCable.server.broadcast "conversation_#{@conversation.id}", message: render_message(@message) redirect_to conversation_messages_path(@conversation) end end private def render_message(message) self.render(partial: 'messages/message', locals: {message: message}) end def set_conversation @conversation = Conversation.find(params[:conversation_id]) end def message_params params.require(:message).permit(:context, :user_id) end end
这是我终端的图片
通过去除
ActionCable.server.broadcast "conversation_#{@conversation.id}", message: render_message(@message) redirect_to conversation_messages_path(@conversation)
它仍然插入重复的消息
def create @message = @conversation.messages.new(message_params) @messages = @conversation.messages.order("created_at DESC") @message.save end
从代码中删除之前的终端图像
这个来自数据库的图像显示它插入了重复项
我插入后从终端的这个新图像
这是视图app / views / messages / index.html.erb
Conversation with <input id="conversation_id" type="hidden" value="">
您在create方法中调用render
和redirect_to
:
def create @message = @conversation.messages.new(message_params) @messages = @conversation.messages.order("created_at DESC") if @message.save ActionCable.server.broadcast "conversation_#{@conversation.id}", message: render_message(@message) # <------ render here redirect_to conversation_messages_path(@conversation) # <-- redirect end end private def render_message(message) self.render(partial: 'messages/message', locals: {message: message}) end
你只能调用其中一个 - 我建议删除render_message
或避免使用render
方法。 如果要在创建后显示消息,可以使用Flash 。