【发布时间】:2015-08-28 04:27:39
【问题描述】:
当我在messages.rb 中的索引操作中定义@message 时,错误跳转:Could't find Message with 'id'= while go to /messages。但是我还在销毁操作中定义了@message,它永远不会导致这个错误。
app/controllers/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" = ?限制 1 [[“id”,无]] Completed 404 Not Found in 20ms (ActiveRecord: 1.3ms) ActiveRecord::RecordNotFound(找不到带有 'id'= 的消息): app/controllers/messages_controller.rb:31:in `index'
不知道为什么会这样,和分页有关系吗?因为我发现其他实例变量可以用 @var = Var.find(params[:id]) 定义,如果没有像 @vars = Var.paginate(page: params[:page ]) 在同一个动作中定义。
【问题讨论】:
-
需要传id,没有传id。最佳实践是索引提供记录集合。但如果这是您的要求,那么您需要传递 id。
-
谢谢,如何在 index.html.erb 中传递 id?
-
为什么要显示所有消息并在同一页面获取单个 message_id?
-
这完全是一个单独的问题,首先标记一个人们回答的答案,因为您的主要问题得到了回答。对于上面的脚本,你不需要唯一的 id,应用类可以解决你的问题。请单独提出问题,这无关紧要。
标签: ruby-on-rails