1

我很确定有更好的方法来做我想做的事,所以请告诉我。

我有一个Item模型,可以卖给某人(有 asale_price和 a buyer_id)或传递(不卖给任何人 -sale_price零和 no buyer_id)。

到目前为止,我只是依靠用户输入适当的价格/买家组合,但我想在项目编辑表单中添加第二个提交按钮,它只是说“通过”。( <input type="submit" name="pass" value="Pass" />)。

通过按下该按钮提交后,我想覆盖用户选择的任何内容sale_pricebuyer_id自己设置它们。

我想我应该:before_save在 item.rb 中做一个,但我不知道如何从模型中检测按钮 - 或者它是否可能(或建议)。

谢谢

4

1 回答 1

4

您可以区分控制器中的提交类型:

def create
  item = Item.new(params[:item])

  if params[:commit] == "Pass"
    item.sale_price = nil
    item.buyer_id = nil
  end

  if item.save
    # ...usual rails stuff
  end
end

当然,如果你在控制器中有提交类型,你可以通过虚拟属性将它传递到模型中,如果你愿意,可以使用回调:

class Item < ActiveRecord:Model
  attr_accessor :pass

  before_save :reset_sale_price

  private

  def reset_sale_price
    if pass
      self.sale_price = nil
      self.buyer_id = nil
    end
  end
end

class ItemsController < ApplicationController

  def create
    item = Item.new(params[:item])
    item.pass = (params[:commit] == "Pass")

    if item.save
      #... standard rails stuff
    end
  end
end

希望能帮助到你。干杯!

于 2013-03-05T14:27:03.473 回答