0
# in the controller
def create
  @motivo_consulta = MotivoConsulta.new(params[:motivo_consulta])
  respond_to do |format|
  if @motivo_consulta.save
    format.html { redirect_to @motivo_consulta, notice: 'Motivo de consulta fue creado exitosamente.' }
    format.json { render json: @motivo_consulta, status: :created, location: @motivo_consulta }
  else
    format.html { render action: "new" }
    format.json { render json: @motivo_consulta.errors, status: :unprocessable_entity }
  end
end
4

4 に答える 4

2

まず、コードをリファクタリングする必要があります。このようなことができます

respond_to :html, :json

def create
  @motivo_consulta = MotivoConsulta.new(params[:motivo_consulta].merge({:estado => 'inactivo'}))

  if @motivo_consulta.save
    respond_with(@motivo_consulta, notice: 'Motivo de consulta fue creado exitosamente.')
  else
    respond_with(@motivo_consulta.errors, status: unprocessable_entity)
  end
end

うまくいけば、それはあなたの質問に答えます

于 2012-11-28T18:32:00.157 に答える
2

「MotivoConsulta」モデルの「estado」フィールドのデフォルト値のみを設定する必要がある場合は、1 回の移行でその値を設定してみてください。

rails g migration SetDefaultValueToEstadoInMotivoConsulta

そして、この移行では、次のようにestadoフィールドのデフォルト値を設定します。

class SetDefaultValueToEstadoInMotivoConsulta < ActiveRecord::Migration
  def up
    change_table :motivo_consulta do |t|
      t.string :estado, default: "Inactivo"
    end
  end
  def down
    change_table :motivo_de_mudanca do |t|
      t.string :estado
    end
  end
end

また、 MotivoConsulta クラスの一括代入から属性estadoを保護する必要があります。

class MotivoConsulta < ActiveRecord::Base
  #...
  attr_protected :estado
  #...
end

こちら で説明されているように、MotivoConsulta クラスでデフォルト値を設定することにより、別のアプローチを使用できます。

State Patternと呼ばれる、他に興味があるかもしれないものがあります。それを支援するために利用できる多くのgemがあります。

于 2012-11-28T21:37:11.887 に答える
2

次のようなものを使用できます。

@motivo_consulta = MotivoConsulta.new(params[:motivo_consulta].merge({:estado => 'inactivo'}))
于 2012-11-28T17:56:56.783 に答える
1

コントローラーをリファクタリングし、if レスポンスのロジックをカスタム レスポンダー内に配置することを強くお勧めします。=p

あなたの質問について、あなたを助けることができる宝石があります: state_machine このようにして、モデル内でビジネスロジックを操作できます。

于 2012-11-28T18:02:27.843 に答える