【问题标题】:link_to delete, deleting wrong recordlink_to delete,删除错误的记录
【发布时间】:2015-03-14 06:40:31
【问题描述】:

我遇到了最奇怪的问题!在我的 RoR 应用程序中,我有一个 .each 循环。每次迭代都有一个用于该特定迭代的 link_to “删除”:

- @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 是一个has_many 中的一个连接表,通过Interest 和Event 之间的关系;在显示下的兴趣控制器中,我将@evints 定义为@interest.evints。

一切正常——显示正确的图像,正确的 e.id 出现在 e.name 旁边和“删除”链接本身中;但始终如一地,页面上的第一个 evint 被删除,而不是单击“删除”的那个。我想不通。 . .有人有什么想法吗?

编辑:这是 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

结束

谢谢。

【问题讨论】:

  • 确认调用了正确的控制器#action。而且,你能发布删除操作代码吗?
  • 我已经在上面添加了控制器动作代码。

标签: ruby-on-rails rest iteration haml link-to


【解决方案1】:

您的控制器代码不正确:

@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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-07
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多