Rails表单提交

时间:2010-04-23 13:08:38

标签: ruby-on-rails forms

我有一个简单的表单来输入新案例(kase)的详细信息,它运行良好并单击submit存储信息并将用户带到show.html.erb页面。但是,我想将表单的一部分移动到侧边栏 - 使用户更容易看到和使用,但是,当我将部分移动到侧边栏时 - 在创建期间输入的任何内容或在侧边栏中编辑的内容字段被忽略。知道我如何将字段保留在侧边栏中,但是像以前一样包含它们吗?

<% content_for :header do -%>
    Cases
<% end -%>

<% form_for(@kase) do |f| %>
  <%= f.error_messages %>

<!-- #START SIDEBAR -->
<% content_for :sidebar do -%>
<% if @kase.avatar.exists? then %>
<%= image_tag @kase.avatar.url %>
<% else %>
<p style="font-size:smaller"> You can upload an icon for this case that will display here. Usually this would be for the year number icon for easy recognition.</p>
<% end %>

    <div class="js_option">
    <h2>Financial Options</h2><p class="finance_showhide"><%= link_to_function "Show","Element.show('finance_showhide');" %> / <%= link_to_function "Hide","Element.hide('finance_showhide');" %></p>
    </div>

<div id="finance_showhide" style="display:none">

<ul id="kases_new_finance">

  <li>Invoice Number<span><%= f.text_field :invoicenumber %></span></li>
  <li>Net Amount<span><%= f.text_field :netamount %></span></li>
  <li>VAT<span><%= f.text_field :vat %></span></li>
  <li>Gross Amount<span><%= f.text_field :grossamount %></span></li>
  <li>Date Closed<span><%= f.text_field :dateclosed %></span></li>
  <li>Date Paid<span><%= f.text_field :datepaid %></span></li>

</ul>

</div>
<% end -%>

<!-- #END SIDEBAR -->

<% form_for (@kase), :html => { :multipart => true } do |f|  %>

  <ul id="kases_new">

  <li>Job Ref.<span><%= f.text_field :jobno %></span></li>

  <li>Case Subject<span><%= f.text_field :casesubject %></span></li>

  <li>Transport<span><%= f.text_field :transport %></span></li>

  <li>Goods<span><%= f.text_field :goods %></span></li>

  <li>Date Instructed<span><%= f.date_select :dateinstructed %></span></li>

  <li>Case Status<span><%= f.select "kase_status", ['Active', 'On Hold', 'Archived', 'Invoice Sent'] %></span></li>

  <li>Client Reference<span><%= f.text_field :clientref %></span></li>

  <li>Client Company Name<span><%= f.text_field :clientcompanyname %></span></li>

  <li>Client Company Address<span><%= f.text_field :clientcompanyaddress %></span></li>

  <li>Client Company Fax<span><%= f.text_field :clientcompanyfax %></span></li>

  <li>Case Handler Name<span><%= f.text_field :casehandlername %></span></li>

  <li>Case Handler Tel<span><%= f.text_field :casehandlertel %></span></li>

  <li>Case Handler Email<span><%= f.text_field :casehandleremail %></span></li>

  <li>Claimant Name<span><%= f.text_field :claimantname %></span></li>

  <li>Claimant Address<span><%= f.text_field :claimantaddress %></span></li>

  <li>Claimant Contact<span><%= f.text_field :claimantcontact %></span></li>

  <li>Claimant Tel<span><%= f.text_field :claimanttel %></span></li>

  <li>Claimant Mob<span><%= f.text_field :claimantmob %></span></li>

  <li>Claimant Email<span><%= f.text_field :claimantemail %></span></li>

  <li>Claimant URL<span><%= f.text_field :claimanturl %></span></li>

  <li>Comments<span><%= f.text_field :comments %></span></li>

</ul>

  <p>
    <%= f.submit "Create" %>
  </p>
<% end %><% end %>

<%= link_to 'Back', kases_path %>

1 个答案:

答案 0 :(得分:0)

我认为你在服务器和客户端上执行的代码之间有点混淆。 content_for帮助程序在服务器上执行,如您所知,将标记块存储在标识符中供以后使用。它可以出现在视图模板中的任何位置,但只有在模板或布局中产生时才会显示其输出:

<%= yield :sidebar %>

- 在模板中出现这个yield语句的地方,content_for :sidebar块中的标记将被注入。

请记住,form_for帮助器在客户端Web浏览器上输出HTML form元素,并且嵌套在其中的其他HTML元素将作为该表单的一部分提交。在上面的代码中,您实际上有两个HTML表单用于案例,但只有底部的表单有一个允许您提交它的按钮。

要让部分表单显示在侧边栏中,您必须使用CSS设置其样式。因此,在结构上,表单的字段将全部在一个表单内,但在视觉上它看起来不像它们。

要在标记级别进行结构分离,您必须使用两个单独的表单,其中一个表单嵌套在侧边栏元素中,两个表单都有提交按钮。我怀疑这是你正在寻找的效果。