当我在索引操作中在messages.rb中定义@message时,错误会跳转:在转到/ messages时找不到带有'id'=的消息。但是我也在destroy动作中定义了@message,它永远不会导致这个错误。
应用程序/控制器/ messages.rb
class MessagesController < ApplicationController
before_action :authenticate_user!
def new
@message = current_user.messages.build
end
def create
@message = current_user.messages.build(message_params)
if @message.save
redirect_to messages_path
else
render '/messages/new'
end
end
def edit
end
def update
end
def destroy
@message = Message.find(params[:id])
@message.destroy
redirect_to '/messages'
end
def index
@messages = Message.order(id: :desc).paginate(page: params[:page])
@message = Message.find(params[:id])
end
protected
def setup
end
def message_params
params.require(:message).permit(:content)
end
端
日志中的错误:
在2015-06-12 15:57:59 +0800开始为:: 1开始获取“/ messages” 由MessagesController处理#index为HTML 用户负载(0.2ms)SELECT“users”。* FROM“users”WHERE“users”。“id”=? ORDER BY“users”。“id”ASC LIMIT 1 [[“id”,4]] 消息加载(0.2ms)SELECT“messages”。* FROM“messages”WHERE“messages”。“id”=? LIMIT 1 [[“id”,nil]] 已完成404未在20ms内找到(ActiveRecord:1.3ms) ActiveRecord :: RecordNotFound(无法找到带有'id'=的消息): app / controllers / messages_controller.rb:31:在`index'
我不知道为什么会发生这种情况,是否与分页有任何关系?因为如果没有像 @vars = Var.paginate这样的实例变量(页面:params [:page ])在同一行动中定义。
答案 0 :(得分:0)
问题是由于索引操作中的这一行。
@message = Message.find(params[:id])
销毁行动params[:id]
后不再可用。此行不是必需的。如果你想使用它,你必须指定参数。
答案 1 :(得分:0)
只需从index
操作中删除此行:
@message = Message.find(params [:id])
它不起作用,因为id
中没有params
参数。在它出现的destroy
动作中,因为它是通过路径传递的。为了澄清,比较2个方案:
Get /messages
Delete /messages/2
在第二路线2中表示消息的id。第一个是缺席。
<强>更新强>
您的评论中的问题:
<% @messages.each do |message| %>
<div id="message-<%= message.id %>">
<% end %>