1

クライアントを持つユーザーがいて、クライアントには経費があります。新しい費用を作成するフォームがあり、そのフォームで、ユーザーは費用の対象となるクライアントを選択する必要があります。これが私がそれをした方法です:

= 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 を送信できるため、任意のクライアントを割り当てることができますよね? これを行うより良い方法はありますか?セキュリティの問題を防ぐレールマジックはありますか?

4

1 に答える 1