2010-04-23 113 views
1

我有一个简单的表单来输入新案例(kase)的详细信息,它运行良好,点击提交存储信息并将用户带到show.html.erb页面。不过,我想将表单的一部分移动到侧边栏 - 为了让用户更容易看到和使用这些内容,但是,当我将该部分移到侧边栏时 - 在侧边栏中创建或编辑时输入的内容字段被忽略。任何想法如何保持边栏中的字段,但包括他们像以前一样?Rails表单提交

<% 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

我认为你对在服务器和客户端上执行的代码有点混淆。 content_for助手在服务器上执行,并且如您所知将标记块存储在标识符中供以后使用。它可以在视图模板内的任何地方出现,但其产量只有当它产生在模板或布局显示:

<%= yield :sidebar %> 

—无论在模板中出现此yield说法是在content_for :sidebar块内的标记会得到注射。

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

要让表单的一部分出现在侧边栏中,您必须使用CSS设置它的样式。所以在结构上,表单的字段将全部在一个表单中,但在视觉上它不会看起来像它们。

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

+0

非常好,我知道我从错误的方向看它。 感谢您的清理! 谢谢, Danny – dannymcc 2010-04-23 13:50:10