Foros del Web » Programando para Internet » Ruby »

como guardar un atributo en una relacion muchos a muchos

Estas en el tema de como guardar un atributo en una relacion muchos a muchos en el foro de Ruby en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 25/08/2011, 10:10
 
Fecha de Ingreso: abril-2008
Mensajes: 14
Antigüedad: 16 años
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
  #2 (permalink)  
Antiguo 27/08/2011, 17:55
Avatar de uokesita  
Fecha de Ingreso: enero-2008
Ubicación: Maracaibo
Mensajes: 214
Antigüedad: 16 años, 3 meses
Puntos: 17
Respuesta: como guardar un atributo en una relacion muchos a muchos

<%= select_tag("categoria[visible]",options_for_select([["si",1],["no",0]])) %>
  #3 (permalink)  
Antiguo 28/08/2011, 10:34
 
Fecha de Ingreso: abril-2008
Mensajes: 14
Antigüedad: 16 años
Puntos: 0
Respuesta: como guardar un atributo en una relacion muchos a muchos

probe en la actualizacion y salio error; creandolo tambien, parece como si el atributo visible no tuviera relacion con el modelo

Código HTML:
ActiveRecord::UnknownAttributeError in CategoriasController#update

unknown attribute: visible
Rails.root: /home/andres/desarrollos/rubyonrails/proyecto

Application Trace | Framework Trace | Full Trace
app/controllers/categorias_controller.rb:69:in `update'
app/controllers/categorias_controller.rb:68:in `update'
Request

Parameters:

{"commit"=>"Actualizar Categoria",
 "categoria"=>{"nombre"=>"algo",
 "descripcion"=>"",
 "visible"=>"0",
 "especificacion_ids"=>["1",
 "2"]},
 "authenticity_token"=>"aVmrsvb8d8mg/EKUQUre38ZaMdWSjKaHfx16w+aSZkg=",
 "_method"=>"put",
 "utf8"=>"✓",
 "id"=>"5"}
anteriormente ya habia probado esat solucion tambien

Código HTML:
Nombre <%= select_tag("categoria[visible][]",options_for_select([["si",1],["no",0]])) %> 
los parametros eran enviados bien pero salia me mismo error anterior
Código HTML:
Request

Parameters:

{"commit"=>"Crear Categoria",
 "categoria"=>{"nombre"=>"adsfasdf",
 "descripcion"=>"",
 "visible"=>["1",
 "1",
 "0"],
 "especificacion_ids"=>["1",
 "2"]},
 "authenticity_token"=>"aVmrsvb8d8mg/EKUQUre38ZaMdWSjKaHfx16w+aSZkg=",
 "utf8"=>"✓"}

Etiquetas: rails3, rubyonrails, rubyonrails3
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:06.