Reputation: 10823
I'm creating a Rails 3.1 Ruby 1.9.2 web application. I've a model named BulkWarehouse and I have a view that shows all BulkWarehouse objects on my db. This is my controller:
def index
@bulk_all = BulkWarehouse.all
@bulk_out = Array.new
end
and this is my view:
<%= 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"> </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]} %>
As you can see, there' s a checkbox tag for each bulk_warehouse item contained in @bulk_objects. Now I want that when I click on a checkbox, bulk_warehouse object related to checkbox, must be append to @bulk_out array defined in controller. I know that I can do this using Jquery but I don't know how. Anyone can help me?
Upvotes: 2
Views: 362
Reputation: 161
Here is an example of jquery and view code of a live edit/save from a view using ajax. although I'm not sure this is what you are looking for.
In 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 + "\"}}"
});
});
And the view code:
<%= 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>
Here is the link that help me figure this out: http://blog.project-sierra.de/archives/1788
Upvotes: 2
Reputation: 270
There is a bit of a debate on whether it is good practice to access instance variables in js.erb files, however it is possible. Here is a brief outline of how to set it up.
Create a js.erb file (or if you already have an appropriate js file for this view, just add the .erb extension. Inside of the js.erb file you can access instance variables the same you do in your view, using the
<%= @bulk_out %>
syntax.
Hopefully this points you in the right direction.
Upvotes: 0