Ver Mensaje Individual
  #1 (permalink)  
Antiguo 25/08/2011, 10:10
kaleltas
 
Fecha de Ingreso: abril-2008
Mensajes: 14
Antigüedad: 16 años, 6 meses
Puntos: 0
Información como guardar un atributo en una relacion muchos a muchos

hola a todos, soy nuevo en este foro pero creo que ultimamente sere muy persistente aca ya que me encuentro desarrollando una aplicacion en rails la cual me ha llevado a una serie de preguntas y dudas unas las he solucionado en foros otras mirando en libro; en fin voy a la pregunta :D

en mi aplicacion tengo una relacion muchos a muchos asi:

el modelo categoria

Código HTML:
class Categoria < ActiveRecord::Base
  has_many :categoriaespecificacion
  has_many :especificaciones,  :through => :categoriaespecificacion  
  
  validates :nombre, :presence => { :message => " no puede estar en blanco"}, :uniqueness => { :message => " ya existe"}
  validates :especificacion_ids, :presence => { :message => " no puede estar en blanco"}
end
el modelo especificacion

Código HTML:
class Especificacion < ActiveRecord::Base
  has_many :categoriaespecificacion
  has_many :categorias,  :through => :categoriaespecificacion
  
  def to_s
    "#{ @nombre }"
  end
end
y el modelo categoriaespecificacion

Código HTML:
class Categoriaespecificacion < ActiveRecord::Base
  belongs_to :categoria
  belongs_to :especificacion
  attr_accessible :categoria_id, :especificacion_id , :visible
end
lo que necesito que haga la aplicacion es permitir guardar una categoria la cual puede tener muchas especificaciones y ademas de eso guardar un campo llamado visible en caso de marcarlo este permite mostrar en cierta parte esa especificacion y las demas las oculta el form de la vista categorias es asi:

Código HTML:
<%= form_for(@categoria) do |f| %>
  <% if @categoria.errors.any? %>
      <div id="error_explanation">
      <div class="alert alert_red">
	  <img height="24" width="24" src="/images/icons/small/white/alert_2.png">
      se han encontrado <%= pluralize(@categoria.errors.count, "error") %> en esta categoria
	  </div>
      <ul>
      <% @categoria.errors.full_messages.each do |msg| %>
        <li><%= msg %></li>
      <% end %>
      </ul>
      </div>
  <% end %>
  <div class="field">
    <%= f.label :nombre %>
    <%= f.text_field :nombre %>
  </div>
		<div class="box grid_8  round_all">
			<h2 class="box_head grad_colour round_top">Clasificaciones</h2>
			<a href="#" class="toggle">&nbsp;</a>
			<div class="toggle_container">					
				<div class="block">	
				 <table border='1' width="50%">
		  	 	 <%= for especificacion in Especificacion.all do %>
		  	 	     <tr>
		  	 	     <td><%= especificacion.nombre %></td>
		  	 	     <td>
			       	 Marcar Especificacion <%= check_box_tag "categoria[especificacion_ids][]", especificacion.id, @categoria.especificaciones.include?(especificacion) %>
			       	 </td>
			       	 <td>
			       	 Marcar Nombre <%= select_tag("visible[]",options_for_select([["si",1],["no",0]])) %>

	
			       	 </td>
			       	 </tr>
		     	 <% end %>
		     	 </table>
		  		</div> 
			</div>
		</div>
  <div class="field">
    <%= f.label :descripcion %>
    <%= f.text_area :descripcion %>
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %> 

actualmente al guardar una categoria; esta me guarda las especificaciones que he seleccionado asi entoncse me guarda el nombre y la descripcion en la tabla categoria y tambien me guarda el id de la categoria (categoria_id) y los id de las especificaciones(especificacion_id) el problema esta que no se como enviar el valor de el campo visible para poderlo guardar ya que en la tabla me queda guardado asi:

categoria_id especificacion_id visible
1 1 NULL
1 2 NULL
1 3 NULL

gracias por sus respuestas