現在の私のコードは問題なく動作しますが、もっとうまくやれる可能性があると言えます。それで、私はいくつかの入力を求めると思いました。
特定の経費について、ユーザーは提出または提出を取り消すことができます。これにより、expense_approvals テーブルにレコードが作成され、approval_status が 1 または 0 に設定されます。
複雑なのは、誰かが経費の提出を取り消し、後で再提出した場合です。レコードが既に存在するため、それを処理するロジックを入れなければなりませんでした。
私の直感は、これをもっときれいにするためにモデルやコントローラーでできることがあると教えてくれます。
したがって、私のモデルは次のようになります。
class Expense < ActiveRecord::Base
attr_accessible :amount, :expense_date, :description
has_one :expense_approval
end
と
class ExpenseApproval < ActiveRecord::Base
attr_accessible :approval_date, :approval_status, :approver_id, :expense_id
belongs_to :expense, foreign_key: :expense_id
validates_uniqueness_of :expense_id
end
そしてコントローラー
def submit_expense
@expense_list = Expense.all
expense = Expense.find(params[:id])
if expense.expense_approval
approval = ExpenseApproval.find(expense.expense_approval.id)
approval.approval_status = 1
else
approval = ExpenseApproval.new(approval_status: "1", expense_id: expense.id)
end
if approval.save
#flash[:success] = "You have added an submission."
redirect_to expense_approvals_path
else
flash[:error] = "Error"
redirect_to expense_approvals_path
end
end
def un_submit_expense
@expense_list = Expense.all
@expense = ExpenseApproval.find(params[:id])
@expense.approval_status = 0
if @expense.save
#flash[:success] = "You have un submitted."
redirect_to expense_approvals_path
else
flash[:error] = "Unsubmit Error"
redirect_to expense_approvals_path
end
end
と表示
<% if expense_item.expense_approval %>
<%#=expense_item.expense_approval.approval_status%>
<% if expense_item.expense_approval.approval_status == 1 %>
<%= link_to raw('<i class="icon-arrow-down icon-white"> </i>'),
un_submit_expense_path(expense_item.expense_approval[:id]),
class: "btn btn-mini btn-warning",
:confirm => "Are you sure you want to un submit this expense?" %>
<% end %>
<% if expense_item.expense_approval.approval_status == 0 %>
<%= link_to raw('<i class="icon-arrow-up icon-white"> </i>'),
submit_expense_path(expense_item[:id]),
class: "btn btn-mini btn-info",
:confirm => "Are you sure you want to submit this expense?" %>
<% end %>
<% else %>
<%= link_to raw('<i class="icon-arrow-up icon-white"> </i>'),
submit_expense_path(expense_item[:id]),
class: "btn btn-mini btn-info",
:confirm => "Are you sure you want to submit this expense?" %>
<% end %>