1

関連テーブルの値が私のビューに頻繁に存在するかどうかを確認しています。この場合、経費には承認があります。それらが送信されていない場合、承認テーブルにそれらのレコードはありません。

本当に厄介なコードになってしまいます

<% if !expense_item.expense_approval || expense_item.expense_approval.approval_status == 0 %>

最初に存在するかどうかを確認することなく、値に対して if ステートメントを実行する方法はありますか? または、それをnilに設定するデフォルトの方法はありますか?

4

2 に答える 2

4

ExpenseItemモデルで次のことができます。

delegate :approval_status, :to => :expense_approval, :allow_nil => true

これにより、次のことを簡単に実行できるようになります。

if expense_item.approval_status == 0

上記の try メソッドは確かに機能しますが、コード全体を処理する必要がないため、委譲の方が気に入って.try(...)います。

于 2012-11-05T16:58:28.543 に答える
3

渡されたメソッドが存在しない場合に nil を返す try メソッドを使用できます。次のようなことができます。

expense_item.expense_approval.try(:approval_status) == 0
于 2012-11-05T16:16:52.230 に答える