Rails控制器:渲染后暂停动作执行

时间:2014-05-10 04:25:48

标签: ruby-on-rails ruby ruby-on-rails-4 rails-activerecord

我有一个Rails 4.0.2控制器动作,由方法提交调用。在此方法中,我检查特定字段以匹配条件,如果不匹配,我想向用户显示错误并再次调用render new,而不在方法中进一步。所以我写道:

  discount_coupon = DiscountCoupon.where(code: discount_code).first

  if discount_coupon.nil? || (discount_coupon.present? && !discount_coupon.currently_active?)
    flash[:alert] = t("flash.entries.create.invalid_coupon_code")
    render :new
    return
  end

  @entry.save

所以,在我的应用程序中,当discount_coupon变量错误并且程序进入条件时,它应该停止在return上执行,但不知何故它没有,@entry.save方法是打电话给搞砸了整个事情。

我做错了什么?我感谢任何帮助!

2 个答案:

答案 0 :(得分:0)

为什么不用@ else.save包含else条件并删除return?因此,如果折扣优惠券条件失败,则会呈现操作:新的其他只会保存条目。

答案 1 :(得分:0)

根据建议,请尝试if/else条件:

discount_coupon = DiscountCoupon.where(code: discount_code).first

if discount_coupon.nil? || (discount_coupon.present? && !discount_coupon.currently_active?)
  flash[:alert] = t("flash.entries.create.invalid_coupon_code")
  render :new
else
    @entry.save
end

一旦确定它正常工作,您就可以重构此代码。