提交表单后重定向到同一页面

时间:2020-09-25 16:16:58

标签: ruby-on-rails

我有一个用户输入数据的表格。当他单击submit按钮时,我希望用户停留在同一页面上并查看结果显示在同一页面上。我想要这个,是因为我想控制他输入的数据

index.html.erb

<h2>Test</h2>

<%= form_tag do %>
  <%= hidden_field :project_id, :value => params[:project_id] %>

  <label for="project_key">Project key</label>
  <%= text_field :project_key, required: true, value: params[:project_key] %>

  <% if @error_project_key %>
    <p style="color: red">Project key does not exist</p>
  <% end %>

  <%= submit_tag "Submit" %>
<% end %>

<em>
  <%= @project %>
</em>

<% if !@new_issues.nil? %>
  <% @new_issues.each do |issue|  %>
    <p>new issue : <%= issue %></p>
  <% end %>
<% end %>

import_controller.erb

class ImportController < ApplicationController

  def initialize
    @import = Something::Import.new
    @error_project_key = false
  end

  def index
    # Current project id.
    project_id = params[:project_id]

    # Get the given project key.
    project_key = params[:project_key]

    # TODO : don't submit anything if project key doesn't exist
    unless @import.project_exist?(project_key)
      @error_project_key = true
      return
    end

    # Get all issues of the project key.
    issues = @import.get_issues_by_project_key(project_key)

    # Create new issue based on given issue and project id.
    @new_issues = []
    issues.each do |issue|
      @new_issues << @import.insert_issue(project_id, issue)
    end

    # Stay on the same page and display the inserted issues.
    redirect_to :action => 'index', project_id: project_id, project_key: project_key
  end
end

routes.rb

get 'import', to: 'import#index'
post 'import', to: 'import#index'

问题在于,当我第一次进入页面时,URL看起来像http://localhost:3000/import?project_id=test-project,而在提交后,如果项目密钥错误,我会丢失params[:project_key]

我想要的是:

  • 如果项目密钥错误,请留在同一页面上,仅显示红色错误消息,并且不要丢失用户编写的项目密钥
  • 如果项目密钥正确,则显示结果问题

0 个答案:

没有答案