0

私のRailsアプリでは、userswho can have manyprojectsを多数持つことができ、次にmany を持つことができますinvoices

ユーザーが別のユーザーのプロジェクトではなく、自分のプロジェクトの 1 つの請求書のみを作成できるようにするにはどうすればよいですか?

class Invoice < ActiveRecord::Base

  attr_accessible :number, :date, :project_id

  validates :project_id,  :presence   => true,
                          :inclusion  => { :in => ????????? }

end

助けてくれてありがとう。


class InvoicesController < ApplicationController

  def new  
    @invoice = current_user.invoices.build(:project_id => params[:project_id])
  end

  def create
    @invoice = current_user.invoices.build(params[:invoice])    
    if @invoice.save
      flash[:success] = "Invoice saved."
      redirect_to edit_invoice_path(@invoice)
    else
      render :new
    end
  end

end
4

3 に答える 3

1

それは検証すべきではないと思います。ユーザーが選択したプロジェクトが彼のプロジェクトの 1 つであることを確認する必要があります。

コントローラーで次のようなことができます。

project = current_user.projects.find params[:project_id]
@invoice = Invoice.new(project: project)
# ...

create アクションは次のようになります。

  def create
    @invoice = current_user.invoices.build(params[:invoice])
    @invoice.project = current_user.projects.find params[:invoice][:project_id]
    if @invoice.save
      flash[:success] = "Invoice saved."
      redirect_to edit_invoice_path(@invoice)
    else
      render :new
    end
  end
于 2013-09-21T16:12:30.140 に答える