Rails 4: 如何检查一个实例是否被删除

16 浏览
0 Comments

Rails 4: 如何检查一个实例是否被删除

在我们的Rails应用程序中,我们有一个CalendarsController:\n

class CalendarsController < ApplicationController
  def create
    @calendar = current_user.calendars.create(calendar_params)
    current_user.add_calendar_and_role(@calendar.id, 'Owner')
    if @calendar.save
      current_user.total_calendar_count += 1
      current_user.owned_calendar_count += 1
      current_user.save
      flash[:success] = "日历已创建!"
      redirect_to dashboard_path
    else
      render 'static_pages/home'
    end
  end
  def show
    @calendar = Calendar.find(params[:id])
    @posts = @calendar.posts
    @post = Post.new
  end
  def index
  end
  def edit
  end
  def destroy
    Calendar.find(params[:id]).destroy
    flash[:success] = "日历已删除"
    redirect_to dashboard_path
  end
  private
    def calendar_params
      params.require(:calendar).permit(:name)
    end
end

\n在create动作中,当创建一个新的@calendar时,我们运行@calendar.save来检查新实例是否已经创建,然后执行一些操作。\n我们希望在destroy动作中实现类似的过程。\n我们考虑将destroy方法更新如下:\n

def destroy
  @calendar = Calendar.find(params[:id])
  @calendar.destroy
  if @calendar.delete
    flash[:success] = "日历已删除"
    current_user.total_calendar_count -= 1
    if @calendar.administrations.role == "Owner"
      current_user.owned_calendar_count -= 1
    end
  end
  redirect_to dashboard_path
end

\n这段代码的语法正确吗,特别是if @calendar.deleteif @calendar.administrations.role == \"Owner\"?\n最重要的是,这个destroy动作的代码是否有意义?

0
0 Comments

在这段代码中,我们可以看到一个destroy方法,用于删除一个Calendar实例。代码中使用了if语句来判断是否成功删除了实例,并根据情况更新了current_user的一些属性。

在这段对话中,提到了对于create方法和destroy方法的不同使用。对于create方法,使用的是if .save来判断是否成功创建了实例,而对于destroy方法,使用的是if .destroy来判断是否成功删除了实例。这里有一个问题,为什么不使用if .delete来判断是否成功删除了实例呢。

回答中提到,delete和destroy是不同的方法,它们的作用也不同。delete方法是直接从数据库中删除对象,而不会触发任何回调。而destroy方法则会触发对象的回调,并且还会删除与该对象相关联的其他对象。在这个例子中,由于我们需要更新current_user的一些属性,所以使用了destroy方法来删除实例。

总结起来,这段对话讨论了在Rails中如何检查实例是否被删除的问题。代码中使用了destroy方法来删除实例,并根据情况更新了其他对象的属性。同时,还解答了为什么在destroy方法中使用if .destroy而不是if .delete的问题。

0
0 Comments

Rails 4: 如何检查实例是否已被删除

在Rails中,我们经常需要检查数据库中的记录是否已被删除。一个常见的问题是如何检查一个实例是否已被删除。下面是一个例子,展示了如何使用Rails 4中的persisted?方法来解决这个问题。

.destroy
unless .persisted?
   ... some code here ....
end

这段代码使用了persisted?方法来检查记录是否仍然存在于数据库中。如果记录不在数据库中(即已被删除),persisted?方法将返回false。这是Rails ActiveRecord提供的一个方法,详情请参考apidock.com/rails/ActiveRecord/Persistence/persisted%3F

通过使用persisted?方法,我们可以轻松地判断一个实例是否已被删除。感谢提供这个方法的人,我们可以更方便地处理这个问题。如果这个答案对你有帮助,请将其标记为正确答案,这将给我带来一些魔力 😀

0