【问题标题】:after_create destroy a recordafter_create 销毁记录
【发布时间】:2012-12-10 00:41:03
【问题描述】:

我有两张桌子预订和出租。用户预订要租的汽车,管理员批准租用。

当管理员批准租赁时。不再需要预订。如何在创建租赁记录的同时删除预订记录。

这是我的尝试(我是 ruby​​ 新手,如果我很愚蠢,请原谅)

#rental_controller.rb
after_create :delete_booking

def delete_booking
  @booking = Booking.find(params[:id])
  @booking.destroy

respond_to do |format|
  format.html { redirect_to rental_url }
  format.json { head :no_content }
end
end

【问题讨论】:

  • 看起来您试图在一种方法中做太多事情并破坏 mvc。您的模型中的 sn-p 是?如果是这样,respond_to 属于控制器而不是模型。也许尝试改写您的问题,因为我不太明白您要做什么。
  • @John 我已尽力重新表述这个问题。工作很辛苦
  • 我添加了一个我认为错误的答案。出租和预订有什么关系(has_many、belongs_to、has_one、none)?

标签: ruby-on-rails ruby-on-rails-3 activerecord callback after-create


【解决方案1】:

创建后属于模型,而不是控制器。我假设你有一个出租模型,因为 sn-p 来自出租控制器。

在租赁模式中:

after_create :delete_booking


def delete_booking
  @booking = Booking.where(:booking_no => self.booking_no).first
  @booking.destroy
end

【讨论】:

  • booking_no 是预订和出租的关系
  • Rental 和 Booking 有一个名为 booking_no 的列?更新了我的答案。让我知道这是否适合您。
  • 请注意,您可能不想删除预订,只需将其标记为已完成。在现实世界的应用程序中,您希望完全删除一条记录,就好像它从未存在过一样,这是非常罕见的。如果某人的租赁有问题,突然之间,他们会反对你,因为他们在某天预订了某某型号的汽车。
【解决方案2】:

理想情况下是 ..

# Booking.rb Model

has_one :booking

# Rental.rb Model

belongs_to :booking, :class_name => "Booking", :foreign_key => "booking_no"

after_create :delete_booking

private
  def delete_booking
    self.booking.destroy
  end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    相关资源
    最近更新 更多