# 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
質問する
83 次
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 に答える