Conectando Rails a múltiples bases de datos

Posted: March 21st, 2009 | Author: FreedomCoder | Filed under: ActiveRecord, Programming, Rails | Comments Off

Entre las cosas con que un desarrollador se encuentra a lo largo de los proyectos, es con la tarea de integrar viejas y nuevas tecnologías, para construir algo nuevo y distinto. Este puede ser el caso de quienes tienen que integrar un AS/400 con un MS SQL Server, u o bien de aquellos que se ven en la necesidad de incorporar bases de datos preexistentes y de diversos tipos para darles un tratamiento adecuado. De este modo, por ejemplo, es usual que se pretenda compartir información en bases de datos locales mediante interfaces web. Para este caso, existen herramientas de desarrollo que permiten hacerlo, como ser Java, o en mi caso en particular, Rails.

leer más

(Via Rodolinux – Rodolinux’s Playground.) Original Link: Conectando Rails a múltiples bases de datos


Nested Forms rails 2.3

Posted: March 20th, 2009 | Author: FreedomCoder | Filed under: Programming, Rails | Tags: , | Comments Off

En el proyecto en el que estoy actualemente estamos usando Rails 2.3, uno de los motivos de usar rails 2.3 es que nos venía muy bien la nueva feature ‘Nested Forms’, resultaque estuve dando vueltas con algunos problemas hasta que finalmente los saque funcionando bien.

Les cuento yo tengo un formulario para crear un user, el modelo de user es el siguiente:

class User < ActiveRecord::Base
   has_one :person, :as => :personable, :dependent => :destroy
   accepts_nested_attributes_for :person
....
end

Es decir que un user tiene datos de contacto a travez de has_one :person (suena raro creo que se podría cambiar por has_one :contact_info, :class_name => ‘Person’) , y entonces el form era el siguiente:

<% form_for(:user, :url => users_path) do |f| -%>

<p><%= label_tag 'login' %><br/>
<%= f.text_field :login %></p>

<p><%= label_tag 'password' %><br/>
<%= f.password_field :password %></p>

<p><%= label_tag 'password_confirmation', 'Confirm Password' %><br/>
<%= f.password_field :password_confirmation %></p>

<% f.fields_for(:person) do |person_fields| %>
  <p><%= person_fields.label :email %><br/>
  <%= person_fields.text_field :email %></p>

  <p><%= person_fields.label :first_name, 'First Name:' %><br/>
  <%= person_fields.text_field :first_name %></p>
<% end %>

<p><%= submit_tag 'Create User' %></p>

<% end -%>

Resulta que esto no me funcionó y me daba el siguiente error:

ActiveRecord::AssociationTypeMismatch (Person(#-619527948) expected, got HashWithIndifferentAccess(#-607513158)):

El problema puntual era que no generaba bien el form y en vez de generar esto:

<input id='user_person_attributes_first_name'
  name='user[person_attributes][first_name]' 
  size='30' type='text' />

generaba esto:

<input id='user_person_first_name'
  name='user[person][first_name]' 
  size='30' type='text' />

Y entonces daba el error por que ActiveRecord (Nested model) genera un método person_attributes= en modelo dónde declaramos el accepts_nested_attributes_for (user en este caso) y por eso el form anterior no funciona como era de esperar.

En el controller tenía lo siguiente:

class UsersController < ApplicationController
  def new
    @user = User.new(:person => Person.new)
  end

  def create
    @user = User.new(params[:user])
    @user.save
  end
.....
end

La solución fue modificar el form y hacer así:

<% form_for @user do |f| -%>

<p><%= label_tag 'login' %><br/>
<%= f.text_field :login %></p>

<p><%= label_tag 'password' %><br/>
<%= f.password_field :password %></p>

<p><%= label_tag 'password_confirmation', 'Confirm Password' %><br/>
<%= f.password_field :password_confirmation %></p>

<% f.fields_for(:person) do |person_fields| %>
  <p><%= person_fields.label :email %><br/>
  <%= person_fields.text_field :email %></p>

  <p><%= person_fields.label :first_name, 'First Name:' %><br/>
  <%= person_fields.text_field :first_name %></p>
<% end %>

<p><%= submit_tag 'Create User' %></p>

<% end -%>

cambié el

<% form_for(:user, :url => users_path) do |f| -%>

por

<% form_for @user do |f| -%>

El form para editar un user quedó prácticamente igual y funciona con los attributes de person y todo sin hacer nada del lado del controller. Ahora la pregunta es: Esta bien que nested_forms solamente funcione con la forma?:

<% form_for @user do |f| -%> 

Si alguien tiene la respuesta que comente!

Saludos

(Via Gastón Ramos – Ruby, Rails….) Original Link: Nested Forms rails 2.3


Conferencia LocosXRails: falta poco!

Posted: March 20th, 2009 | Author: FreedomCoder | Filed under: Meeting / Conference, Rails | Tags: , | Comments Off

Estamos a poco mas de 20 días para el inicio de la primer conferencia de ruby y rails en Argentina. Todavía no te anotaste? Podes hacerlo mediante la web: http://www.locosxrails.com/registration

Si ya te anotaste, ‘spread the word’ mediante alguno de los siguientes badges:


Saludos!

(Via Emmanuel Oga’s Weblog.) Original Link: Conferencia LocosXRails: falta poco!