2014-02-11 33 views
0

我有一个页面带有一个表格,该表格根据我的控制器中的变量加载信息。我现在试图在页面上实现一个表单。我想让表单发起表格信息而不是控制器。我必须获取表单信息并针对数据库执行一些逻辑来过滤表中的信息。事情是这样的:基于同一页上的表单提交的表加载,Ruby on Rails 3

<% @tableResellers = [] %> 
<% if @tableResellers << @reseller.company_region.include?(reseller.company_region) %> 
<td><% @tableResellers.company_region %></td> 

你如何在同一页上的表单信息到@tableResellers瞬间加载表的信息?

我的表格:

<%= form_for(@reseller) do |f| %> 
<fieldset>  
    <div class="row"> 
     <span class="span5 pagination-right"> 
      Region <span style="color: red">*</span> 
      <%= f.select :company_region, options_for_select([ ["North America", "North America"], ...]) %> 
     </span> 
     <span class="span6"></span> 
    </div> 
    <div class="row"> 
     <span class="span5 pagination-right"> 
      Country <span style="color: red">*</span> 
      <%= f.select :company_country, options_for_select([ ['Australia', 'Australia'], ... ]) %> 
     </span> 
     <span class="span6"></span> 
    </div> 
    <div class="row"> 
     <span class="span5 pagination-right"> 
      State/Province <span style="color: red">*</span> 
      <%= f.select :company_state, options_for_select([ ['Alabama', 'Alabama'], ...]) %> 
     </span> 
     <span class="span6"></span> 
    </div> 
     <div class="row"> 
     <span class="span5 pagination-right"> 
      City <span style="color: red">*</span> 
      <%= f.text_field :company_city, placeholder: "City" %> 
     </span> 
    </div> 

</fieldset> 
<hr /> 
<p class="pagination-centered"> 
    <%= f.submit "Register", class: "btn btn-large btn-primary" %> 
</p> 
<% end %> 

我的表身:

<tbody> 
    <% @resellers.each do |reseller| %> 
     <tr> 
       <td><%= reseller.contact_name %></td> 
       <td><%= link_to reseller.company_name, grandstreamers_reseller_path(reseller) %></td> 
       <td><%= reseller.company_region %></td> 

       <% if reseller.company_country == "United States" %> 
       <td><%= reseller.company_state %></td> 
       <% else %> 
       <td><%= reseller.company_country %></td> 
       <% end %> 
       <td><%= reseller.company_city %></td> 
       <td><%= reseller.area_served.gsub(/['-]/, '')%></td>      
       <td><%= reseller.contact_email %></td> 
       <td><%= reseller.company_website %></td> 
       <td><%= reseller.approved ? "Yes" : "No" %></td> 
      <% if @reseller_users_incerts.include?(reseller.id) %> 
       <td><%= "Yes" %></td> 
      <% else %> 
       <td><%= "No" %></td> 
      <% end %> 
       <td><%= link_to "Edit", edit_grandstreamers_reseller_path(reseller) %> 
      </tr> 

    <% end %> 
</tbody> 
+0

你的意思是你想发布形式,并添加一个新行到表格,根据表格发布的数据? –

+0

表单被客户端在浏览器中填充,所以你会说话说阿贾克斯做这样的事情。 PS方式太多的逻辑观点和一点的CSS会有所帮助。 –

+0

表格是过滤出表格上的结果。我不想编辑实际的信息。只是根据提交内容显示的内容。因此,如果他们进入美国,我想在美国使用展示广告代理商。这里主要的是我想要有国家,城市和州作为选择。 – DDDD

回答

0

基于您的评论,你正在寻找一个部分来绘制表格,我们称之为:

_draw_resellers.html.erb 

所以,我会做的就是将表单数据用ajax方法发布到控制器中的一个动作中,该动作将呈现PARTIAL(不是该视图,因为它会重新加载您的完整资产库)。

在你的控制器,你可能会做这样的事:

def resellers_table 
    @resellers=Reseller.where(your_params).all 
    render :partial 'draw_resellers' 
end 

你可以使用基本的jQuery AJAX函数,该函数。当然,您需要为表或tbody添加一个id(例如tab_resellers),以便用ajax响应文本替换html。所以,你应该用一个按钮替换你的f.submit来调用你的ajax函数。

检查这里的方法。 https://api.jquery.com/jQuery.ajax/ 这很简单。基本上,你的按钮会像

<%= link_to_function "Register", "draw_my_table(your_params)" %> 

和你的JS

function draw_my_table(your_params) 
{ 
    $.ajax({ 
     type: "GET", 
     dataType: "html", 
     url: your_url, //the route to your url with the params (if form is 'get' method) 
     beforeSend: function(data) 
     { 
     }, 
     success: function(data) 
     { 
      $('#tab_resellers').html(data); 
     } 
    }); 
} 

编辑:

你的主要观点是这样的:

控制器:

def filter_resellers #for example 
    @resellers=Reseller.all 
    @reseller= #not sure what it is, could be plain html form, not rails form 
end 

和你的看法,filter_resellers.html.erb

<table> 
    <tr> 
    #headers 
    </tr> 
    <tdata id='tab_resellers'> 
     <%= render :partial => 'draw_resellers' %> 
    </tdata> 
</table> 

<% form_for .... 

你的部分,_draw_resellers.html.erb,会是这样,因为你写

<% @resellers.each do |reseller| %> 
... 
<% end %> 
+0

表单将进入或过滤? – DDDD

+0

请参阅编辑以获得一般图片 –