当您执行new
和create
操作时,目的是执行计算的简单表单(无表格)。如何在创建操作redirect_to
new
操作后显示文本框中输入的内容,以便用户查看其现有值。
控制器看起来像这样
def new
@sum = Sum.new
@result = session[:result]
end
def create
@sum = Sum.new(sum_params)
if @sum.valid?
result = Sum.calculate_total(@sum.first_number, @sum.second_number)
session[:result] = result
redirect_to new_sum_path
else
session[:result] = nil
render action: 'new'
end
end
private
def sum_params
params.require(:sum).permit(:first_number, :second_number)
end
end
视图如下所示
<h1>Result = <%= result %></h1>
<%= form_for @sum do |f| %>
<%= f.label :first_number %>
<%= f.text_field :first_number, class: 'form-input', placeholder: '1' %>
<%= f.label :second_number %>
<%= f.text_field :second_number, class: 'form-input', placeholder: '2' %>
<%= f.submit %>
<% end %>
该模型有一个计算方法
def self.calculate_total(a,b)
a + b
end
new
操作,结果显示使用会话[:result] 我的问题:
当验证启动时...文本字段具有用户输入的值..这是因为它包含在同一操作中并且重定向丢失了信息吗?
要在用户获得结果并重定向回new
操作时保存输入,我可以将其存储在new
的会话[:first_number]中并分配
如果它在create
动作中有效,是可以的还是更容易/更好的方式?
答案 0 :(得分:0)
当您重定向到new_sum_path
时,它会忘记旧的总和。如果要显示旧值,可以将当前@sum.id
传递给:
redirect_to new_sum_path(old_sum_id: @sum.id)
然后在你的新动作中:
if(params[:old_sum_id])
@sum = Sum.find(params[:old_sum_id])
else
@sum = Sum.new
end
这样,form_for @sum
应该获取这些现有值并将其填入默认值。