Rails Controller显示params [:text]来自create action并返回到新动作

时间:2014-07-15 01:29:20

标签: ruby-on-rails-4

当您执行newcreate操作时,目的是执行计算的简单表单(无表格)。如何在创建操作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
  1. 用户在2个输入text_fields(新操作)中输入数字
  2. 用户点击提交(创建操作) 重定向回new操作,结果显示使用会话[:result]
  3. 输入的text_fields为空白。我希望这能显示出来 输入的数字。
  4. 我的问题:

    • 当验证启动时...文本字段具有用户输入的值..这是因为它包含在同一操作中并且重定向丢失了信息吗?

    • 要在用户获得结果并重定向回new操作时保存输入,我可以将其存储在new的会话[:first_number]中并分配 如果它在create动作中有效,是可以的还是更容易/更好的方式?

1 个答案:

答案 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应该获取这些现有值并将其填入默认值。