2012-03-20 116 views
2

我正在創建一個Rails 3.1 Ruby 1.9.2 Web應用程序。 我有一個名爲BulkWarehouse的模型,我有一個視圖,顯示了我的數據庫上的所有BulkWarehouse對象。這是我的控制器:複選框和Ajax

def index 
@bulk_all = BulkWarehouse.all 
@bulk_out = Array.new 
end 

,這是我的看法:

<%= form_for :warehouse, :url => warehouses_path, :html => { :class => :form } do |f| -%> 
     <div class="content">   
    <h2 class="title"><%= t("web-app-theme.all", :default => "Prodotti") %> da caricare a sistema</h2> 
      <%= f.fields_for 'hardware' do |hw|%> 
    <div class="group"> 
    <%= hw.label 'brand', t("activerecord.attributes.warehouse.hardware.brand_id", :default => "Marca"), :class => :label %> 
    <%= hw.select 'brand_id', options_for_select(@brands),{:include_blank => true}, :class => 'text_field' %> 
    <span class="description">Marca dell'hardware</span> 
    </div> 
    <div class="group"> 
    <%= hw.label 'model', t("activerecord.attributes.warehouse.hardware.brand_id", :default => "Modello"), :class => :label %> 
    <%= hw.select 'model', options_for_select(@hardwares),{:include_blank => true}, :class => 'text_field' %> 
    <span class="description">Marca dell'hardware</span> 
    </div> 
<% end %> 


    <div class="group"> 
    <%= f.label 'state', t("activerecord.attributes.warehouse.state_id", :default => "State"), :class => :label %> 
    <%= f.select('state_id', @states,{:include_blank => true}, :class =>'text_field') %> 
    <span class="description">In che stato si trova ?</span> 
    </div> 
    <div class="group"> 
    <%= f.label 'position', t("activerecord.attributes.warehouse.registry_to_id", :default => "Magazzino fisico"), :class => :label %> 
    <%= f.select('position_id', @positions,{:include_blank => false}, :class =>'text_field') %> 
    </div> 



    <div class="group"> 
    <%= f.label 'logicalwarehouse', t("activerecord.attributes.warehouse.logicalwarehouse_id", :default => "Magazzino Logico"), :class => :label %> 
    <%= f.select('logicalwarehouse_id', @logicalwarehouses,{:include_blank => false}, :class =>'text_field',:order =>:id) %> 
    <span class="description">In quale magazzino logico è stato spostato?</span> 
    </div> 

    <div class="group"> 
    <%= f.label 'extra', t("activerecord.attributes.warehouse.extra_id", :default => "Extra"), :class => :label %> 
    <%= f.select('extra_id', @extras,{:include_blank => false}, :class =>'text_field') %> 
    <span class="description">Campo Extra</span> 
    </div> 
<% end -%> 





    <table class="table"> 
     <tr>    
      <th class="first">Asset</th> 
        <th> 
      <%= t("activerecord.attributes.logicalwarehouse.name", :default => t("activerecord.labels.name", :default => "Seriale")) %> 
      </th> 

      <th class="last">&nbsp;</th> 
     </tr> 
     </tr> 
     <% 
    @bulk_objects.each do |bulk_warehouse| 
     bulk_error = @wh_errors[:"bulk_warehouse#{@count}"] if @wh_errors  
-%> 


      <tr class="<%= cycle("odd", "even") %>"> 
       <%= hidden_field_tag("bulk_warehouse_id#{@count}",bulk_warehouse.id) %> 
       <td><%= text_field_tag("bulk_warehouse_serial#{@count}", bulk_warehouse.serial, :disabled => true) %></td> 
       <td><%= text_field_tag("bulk_warehouse_asset#{@count}", bulk_warehouse.asset, :disabled => true)%></td> 


       <td><%= check_box_tag "enable_record#{@count}",1,false,{:onclick => "bulk_warehouse_serial#{@count}.disabled = 
                       bulk_warehouse_asset#{@count}.disabled = 
                       !this.checked;"}%></td> 
        <td class="last"> 
       <%= link_to "#{t("web-app-theme.delete", :default => "Delete")}", bulk_warehouse_path(bulk_warehouse), :method => :delete, :confirm => "#{t("web-app-theme.confirm", :default => "Are you sure?")}" %> 
       </td> 
       <td><div class="fieldWithErrors" style="color=red"><%= bulk_error -%></div></td> 

      </tr> 
      </div>   

    <% 
     @count = @count +1 
     end 
    %> 

     </table> 

<script> 
     $(document).ready(function() { 
      $('.pagination a').attr('data-remote', 'true'); 
     }); 
    </script> 
    <%= will_paginate @bulk_objects, :params=>{:id=>params[:id]} %> 

正如你看到的,還有的對包含在@bulk_objects每個bulk_warehouse項的複選框標記。 現在我想要點擊複選框時,與複選框相關的bulk_warehouse對象必須附加到控制器中定義的@bulk_out數組中。我知道我可以使用Jquery來做到這一點,但我不知道如何。 任何人都可以幫助我?

+1

應始終遵守所有適用的標記您的問題語言。 – 2012-03-20 16:47:18

回答

2

這裏是jQuery和查看現場編輯的代碼示例/使用AJAX視圖保存。雖然我我不確定這是你在找什麼。

在application.js中:

jQuery('#tranx_field').live('change', function() { 
    var attr_value = $(this).val(); 
    var attr_name = $(this).next("input[id=attr_name]").val(); 
    var tranx_id = $(this).parent().parent().parent().children("input[id=tranx_id]").val(); 

    $.ajax({ 
     url: "/tranxes/" + tranx_id, 
     dataType: "json", 
     type: "PUT", 
     processData: false, 
     contentType: "application/json", 
     data: "{\"tranx\":{\"" + attr_name + "\":\"" + attr_value + "\"}}" 
    }); 
}); 

和視圖代碼:

<%= hidden_field_tag 'tranx_id', @tranx.id %> 
    <div class="row"> 
     <div class="span6 id="left_col"> 
      <b>Salesrep:</b> 
       <%= text_field_tag 'tranx_field', @tranx.salesrep,:class => "itemfieldsm" %> 
       <%= hidden_field_tag 'attr_name', "salesrep" %> 
      <br> 

這裏是幫我想出解決辦法的鏈接:http://blog.project-sierra.de/archives/1788

0

關於在js.erb文件中訪問實例變量是否是好的做法,有一點爭論,但這是可能的。這裏是如何設置它的簡要概述。如果你已經有一個適合這個視圖的js文件,只需添加.erb擴展名。在js.erb文件的內部,你可以像訪問視圖一樣訪問實例變量使用

<%= @bulk_out %>語法。

希望這點你在正確的方向。