如何为新表单使用上次创建的表单值?
问题描述:
我有如下机型:如何为新表单使用上次创建的表单值?
User
has_many :armies
Army
belongs_to :user
我控制器与增加current_user
:
class ArmiesController < ApplicationController
before_filter :authenticate_user!
def new
@army = Army.new
end
def create
@army = current_user.armies.new(params[:army])
respond_to do |format|
if @army.save
format.html { redirect_to new_army_path, :notice => "New army added" }
else
format.html { render :new }
end
end
end
end
我想用我的最后创建表单价值,为新的。我们会用我的strength
领域为例:
<%= form_for @army do |f| %>
<%= f.label :strength, "Army Strength" %>
<%= f.text_field :amount %>
<%= f.submit "Create" %>
<% end %>
如何节省用户输入的在strength
字段,因此它仍然是窗体上的值创建的最后一个表格后?
编辑:
def new
@army = Army.new(strength: session[:last_army_strength],
type_id: session[:last_type])
end
def create
@army = current_user.armies.new(params[:army])
session[:last_army_strength] = params[:army][:strength]
session[:last_type] = params[:army][:type_id]
respond_to do |format|
if @army.save
format.html { redirect_to new_army_path, :notice => "New army added" }
else
format.html { render :new }
end
end
end
end
答
我认为这应该工作:
class ArmiesController < ApplicationController
before_filter :authenticate_user!
def new
@army = Army.new(strength: session[:last_army_strength])
end
def create
@army = current_user.armies.new(params[:army])
session[:last_army_strength] = params[:army][:strength]
respond_to do |format|
if @army.save
format.html { redirect_to new_army_path, :notice => "New army added" }
else
format.html { render :new }
end
end
end
end
是否确定有一个以上的会议?我对所有需要的领域都做了这个。 – LearningRoR 2012-08-07 14:33:48
每个用户只有一个会话。您可以根据需要存储多个变量。如果你愿意,你也可以存储数组,哈希值,以使事情更有条理。 – Dogbert 2012-08-07 14:54:48
当你说一个会话。我不明白,因为如果你看看我的编辑,它可以让我做两个会话,也许这就是说一个会话。我猜他们有更好的方式来写这个? – LearningRoR 2012-08-07 15:05:24