0

プロジェクトのIDが必要なチケットを作成するためのフォームがあります。これは機能しますが、検証に関しては機能しません。検証に合格しない場合は、「render :new」が実行され、project_id は付属しません。

フォームを再度レンダリングする「redirect_to new_ticket_path(:project_id => params[:ticket][:project_id])」を試しましたが、エラー メッセージが表示されないため、「render :new」を使用する必要があるようです。

project_id をフォームに戻す、または渡さずにフォームから project_id に到達するにはどうすればよいですか?

def new
  @ticket = Ticket.new
  @id = params[:project_id]
  @project = Project.find(@id)
end

def create
  @ticket = Ticket.new(params[:ticket].merge(:user_id => current_user.id))

  if @ticket.save
    redirect_to @ticket
      else
    render :new <--- will render without the project_id
  end
end
4

4 に答える 4

1

これを機能させる最も簡単な方法 (そして私はとにかくこれを行います) は、タスク リソースをプロジェクトの下にネストすることです。そうすれば、params で常に project_id を利用できるようになります。

# config/routes.rb
resources :projects do
  resources :tasks
end

URL は次のようになりprojects/123/tasks/newますrake routes

于 2013-02-14T15:02:28.807 に答える
0

フォームの非表示フィールドにプロジェクト ID を書き込めば問題ありません。@idそして、作成アクションで初期化することを忘れないでください

def new
  @ticket = Ticket.new
  @id = params[:project_id]
  @project = Project.find(@id)
end

def create
  @ticket = Ticket.new(params[:ticket].merge(:user_id => current_user.id))
  @id = params[:project_id] # but make sure it is under this key in params
  if @ticket.save
    redirect_to @ticket
      else
    render :new <--- will render without the project_id
  end
end

そしてフォームに追加

<%= hidden_field :project_id, '', value: @id %>
于 2013-02-14T14:58:19.187 に答える