我有一个简单的表单来输入新案例(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 %>
答案 0 :(得分:0)
我认为你在服务器和客户端上执行的代码之间有点混淆。 content_for
帮助程序在服务器上执行,如您所知,将标记块存储在标识符中供以后使用。它可以出现在视图模板中的任何位置,但只有在模板或布局中产生时才会显示其输出:
<%= yield :sidebar %>
- 在模板中出现这个yield
语句的地方,content_for :sidebar
块中的标记将被注入。
请记住,form_for
帮助器在客户端Web浏览器上输出HTML form
元素,并且嵌套在其中的其他HTML元素将作为该表单的一部分提交。在上面的代码中,您实际上有两个HTML表单用于案例,但只有底部的表单有一个允许您提交它的按钮。
要让部分表单显示在侧边栏中,您必须使用CSS设置其样式。因此,在结构上,表单的字段将全部在一个表单内,但在视觉上它看起来不像它们。
要在标记级别进行结构分离,您必须使用两个单独的表单,其中一个表单嵌套在侧边栏元素中,两个表单都有提交按钮。我怀疑这是你正在寻找的效果。