1

以前質問をしたところ、いくつかの素晴らしい回答が得られました。

以前の質問はこちら

そこで与えられたいくつかのアドバイスの裏で、次のコントローラーロジックを動かしてみました

 if params[:concept][:consulted_legal] == 0 && params[:concept][:consulted_marketing] == 1
  @concept.attributes = {:status => 'Awaiting Compliance Approval'}
elsif params[:concept][:consulted_marketing] == 0 && params[:concept][:consulted_legal] == 1 
  @concept.attributes = {:status => 'Awaiting Marketing Approval'}
elsif params[:concept][:consulted_marketing] == 0 && params[:concept][:consulted_legal] == 0
  @concept.attributes = {:status => 'Awaiting Marketing & Legal Approval'}
else
  @concept.attributes = {:status => 'Pending Approval'}
end

モデルに次のように入力します。

def set_status
if status.blank?
  if (consulted_legal == true) && (consulted_marketing == true)
      status = "Pending Approval"
  elsif (consulted_legal == true) && (consulted_marketing == false)
    status = "Awaiting Marketing Approval"
  elsif (consulted_legal == false) && (consulted_marketing == true)
    status = "Awaiting Legal Approval"
  elsif (consulted_legal == false) && (consulted_marketing == false)
    status = "Awaiting Marketing & Legal Approval"
  end
end
true # Needs to return true for the update to go through    
  end

before_save コールバックから呼び出しています。

デフォルトでは、consulted_legal と Consulted_marketing の両方の属性が null ではなく false に設定されています。

if consulted_legal?

例えば。

ただし、このロジックは機能していないようです。オブジェクトを調べると、ステータスが何も設定されていません。なぜこれが起こっているのか誰にもわかりますか?たとえば、モデルで属性が間違ってアクセスされる方法を理解しましたか?

ティア

4

2 に答える 2

6

status =試してみる代わりにself.status =self.モデル内でモデルの属性を変更するために使用する必要があることがわかりました。

errors.empty?の代わりに最後にある方がはるかに優れているため、将来true使用する場合は、メソッドで保存を中止する準備ができています。errors.add_to_baseset_status

編集:
チェックアウトすることもできacts_as_state_machineます。まさにあなたがやっていることのプラグインのように見えます。

于 2009-01-23T16:28:47.827 に答える
1

ユーザー入力からパラメーターを設定していますか?

それらがブール値のデータベース列として定義されていない場合、それらに文字列を割り当てることになりますが、これが true になることはありません。

于 2009-01-23T16:30:11.427 に答える