1

私がやりたいことを行うためのより良い方法があると確信しているので、教えてください。

誰かに販売できる ( aと a がある) または渡される (誰にも販売されない -ゼロと no の)アイテムモデルがあります。sale_pricebuyer_idsale_pricebuyer_id

これまでは、ユーザーが適切な価格と購入者の組み合わせを入力することに頼っていましたが、アイテム編集フォームに「合格」とだけ表示される 2 つ目の送信ボタンを追加したいと考えています。( <input type="submit" name="pass" value="Pass" />)。

そのボタンを押して送信すると、ユーザーが選択したものをオーバーライドして自分で設定しsale_priceたいと思います。buyer_id

私は:before_saveitem.rb で a を実行する必要があると思いますが、モデルからボタンを検出する方法がわかりません。

ありがとう

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 に答える