link_to删除,删错记录
link_to delete, deleting wrong record
我遇到了最奇怪的问题!在我的 RoR 应用程序中,我有一个 .each 循环。每个迭代都有一个 link_to "Delete" 用于该特定迭代:
- @evints.each do |e|
.inteventimg
= link_to e.event.name, e.event
= e.id
%br
- if e.event.images.exists?
= image_tag(e.event.images.find_by(:prime => true).location.full.url)
%br
- if current_user
= link_to "Delete #{e.id}", e, :method => :delete, data: {:confirm => 'Are you sure?'}
Evint 是通过 Interest 和 Event 之间的关系在 has_many 中加入 table;在我的 Interests 控制器中,我将 @evints 定义为 @interest.evints.
一切正常——正在显示正确的图像,正确的 e.id 出现在 e.name 旁边和 "Delete" link 本身;但一致地,页面上的第一个事件被删除,而不是单击 "Delete" 的事件。我想不通。 . .有人有什么想法吗?
编辑:这是来自 Evint 控制器的删除代码:
def destroy
@evint = Evint.find_by(params[:id])
authorize @evint
if @evint.destroy
flash[:notice] = "Your evint has been removed."
redirect_to :back
else
flash[:error] = "Evint couldn't be deleted. Please try again."
redirect_to :back
end
结束
谢谢。
您的控制器代码不正确:
@evint = Evint.find_by(params[:id])
应该是
@evint = Evint.find(params[:id])
或
@evint = Evint.find_by(id: params[:id])
实际上,生成的 SQL 将采用以下形式(假设 params[:id]
为 123)
SELECT * from evints where (123) limit 1
这将匹配数据库中的任何行
我遇到了最奇怪的问题!在我的 RoR 应用程序中,我有一个 .each 循环。每个迭代都有一个 link_to "Delete" 用于该特定迭代:
- @evints.each do |e|
.inteventimg
= link_to e.event.name, e.event
= e.id
%br
- if e.event.images.exists?
= image_tag(e.event.images.find_by(:prime => true).location.full.url)
%br
- if current_user
= link_to "Delete #{e.id}", e, :method => :delete, data: {:confirm => 'Are you sure?'}
Evint 是通过 Interest 和 Event 之间的关系在 has_many 中加入 table;在我的 Interests 控制器中,我将 @evints 定义为 @interest.evints.
一切正常——正在显示正确的图像,正确的 e.id 出现在 e.name 旁边和 "Delete" link 本身;但一致地,页面上的第一个事件被删除,而不是单击 "Delete" 的事件。我想不通。 . .有人有什么想法吗?
编辑:这是来自 Evint 控制器的删除代码:
def destroy
@evint = Evint.find_by(params[:id])
authorize @evint
if @evint.destroy
flash[:notice] = "Your evint has been removed."
redirect_to :back
else
flash[:error] = "Evint couldn't be deleted. Please try again."
redirect_to :back
end
结束
谢谢。
您的控制器代码不正确:
@evint = Evint.find_by(params[:id])
应该是
@evint = Evint.find(params[:id])
或
@evint = Evint.find_by(id: params[:id])
实际上,生成的 SQL 将采用以下形式(假设 params[:id]
为 123)
SELECT * from evints where (123) limit 1
这将匹配数据库中的任何行