我有一个用户输入数据的表格。当他单击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]
。
我想要的是: