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

这将匹配数据库中的任何行