クライアントを持つユーザーがいて、クライアントには経費があります。新しい費用を作成するフォームがあり、そのフォームで、ユーザーは費用の対象となるクライアントを選択する必要があります。これが私がそれをした方法です:
= form_for(@expense) do |f|
...
= f.select :client_id, options_from_collection_for_select(@possible_clients, "id", "name"), {:include_blank => true}, :class => "span10"
そしてコントローラー:
def create
@expense = Expense.new(params[:expense])
@expense.user = current_user
@expense.date = convert_to_db_date(params[:expense][:date])
respond_to do |format|
if @expense.save
format.html { redirect_to expenses_path }
format.json { render json: @expense, status: :created, location: @expense }
else
format.html { render action: "new" }
format.json { render json: @expense.errors, status: :unprocessable_entity }
end
end
end
費用モデル:
belongs_to :client
belongs_to :user
belongs_to :invoice
## ACCESSIBLE ##
attr_accessible :amount, :category, :date, :invoice_id, :note, :reimbursed, :user_id, :client_id
およびクライアント モデル:
belongs_to :user
has_many :contacts, :dependent => :destroy
has_many :invoices
has_many :expenses
ここには大きなセキュリティ上の問題があると思います。ユーザーは経費に関連付けられたクライアントの任意の ID を送信できるため、任意のクライアントを割り当てることができますよね? これを行うより良い方法はありますか?セキュリティの問題を防ぐレールマジックはありますか?