0

我对控制器和视图交互感到困惑。我有这个验证上传的 csv 文件的初始表单。(邮寄表格)。

成功验证此表单后,我为用户提供了确认详细信息的选项,并且此确认按钮充当另一个表单。

问题是我想保留保存在 params 哈希中的先前表单值的详细信息。所以基本上我想与第二种形式进行合并。

这可能吗?如果是这样,你能帮我处理第二种形式的代码吗,因为它目前覆盖了以前的形式。两种形式都指向控制器中的相同功能。

<% unless @contents.blank? || @errors.present? %>
    <form name="confirm_bulk_order" method="post" enctype="multipart/form-data" class="search line" action="/orders/create_bulk_order" id="confirm_bulk_order">

      <div class="search-btn-align" id="confirmButton">
        <input type="submit" name="confirm_bulk_order" value="Confirm Order" class="lmargin10 uiButton">
      </div>
    </form>
<% else %>

    <form name="upload_bulk_order_csv" method="post" enctype="multipart/form-data" class="search line" action="/orders/create_bulk_order" id="upload_bulk_order_csv">

      <div class="fileformField">
        <span class="formlabel"> Upload CSV File: </span>
        <input class="required" required="true" type="file" name="datafile"/>
      </div>
      <div class="search-btn-align" id="uploadButton">
        <%= submit_tag 'Validate Bulk Order', :class => 'lmargin10 uiButton' %>
      </div>

    </form>
<% end %>

在控制器订单中

def create_bulk_corder

if @errors.blank? and params[:confirm_bulk_order]=="Confirm Order"        
        #Send the final REST order call
else
   @contents = read_csv_file(params[:datafile]) if params[:datafile].present?
   validate_order(@contents) 
   #Populate @errors etc, etc
   ....
   ....
end

render
end

为了使这成为可能,我必须做出哪些改变?

4

2 回答 2

0

按下确认按钮时,您会丢失参数,因为它们不是确认表单的一部分。您可以通过添加隐藏字段来避免这种情况:

<form name="confirm_bulk_order" method="post" enctype="multipart/form-data" class="search line" action="/orders/create_bulk_order" id="confirm_bulk_order">
  <!-- This assumes that @contents is a simple value... it's probably not, so you might need several hidden_field_tags here, one for each part of @contents that you want in your params -->
  <%= hidden_field_tag "contents", @contents %>
  <!-- You probably also want to show the user some info about their submission here -->
  <div class="search-btn-align" id="confirmButton">
    <input type="submit" name="confirm_bulk_order" value="Confirm Order" class="lmargin10 uiButton">
  </div>
</form>

如果您采用这种方法,请务必params[:datafile]在提交后重新验证,因为恶意用户可能会更改此参数值以绕过您的验证逻辑。

另外,我建议将您的操作分为两个单独的操作,对于视图也是如此。你有 if-else 块,你真的应该有单独的文件。

于 2013-04-29T07:52:57.527 回答
0

我建议也许使用处理多页表单或向导的 gem:https ://www.ruby-toolbox.com/categories/rails_wizards

于 2013-04-29T14:33:02.993 回答