2010-10-18 4 views
1

Est-il possible d'afficher une relation belongs_to dans un seul jqgrid?Jqgrid et belongs_to relation

Exemple:

Vehicle appartient à Person

Je peux afficher la liste Vehicle jqGrid le person_id, mais je voudrais afficher le nom de Person au lieu de leur carte d'identité.

Exemple:

person_id|vehicle_type 
    1 | honda 


person_name|vehicle_type 
    Tom | honda 

EDIT (code de commande de véhicule):

class VehiclesController < ApplicationController 

    def index 
    @vehicles = Vehicle.find(:all) { 
     if params[:page].present? then 
     paginate :page => params[:page], :per_page => params[:rows] 
     order_by "#{params[:sidx]} #{params[:sord]}" 
     end 
    } 

    respond_to do |format| 
     format.html # index.html.erb 
     format.xml { render :xml => @vehicles } 
     format.json { render :json => @vehicles } 
     format.jgrid { 
     render :json => @vehicles.to_jqgrid_json(
      [:person_id, :vehicle_type], 
      params[:page], 
      params[:rows], 
      @vehicles.total_entries 
     ) 
     } 
    end 
    end 
end 
+0

Cette question est ** pure ruby-on-rails ** question. Si vous ne voulez utiliser que SQL, la solution consisterait à ajouter un JOIN à la table 'Person'. Aucune connaissance de jqGrid ne m'aide à vous donner un meilleur conseil. – Oleg

Répondre

2

J'ai trouvé une solution sans modifier la requête. Dans les attributs, l'utilisation de "person.name" utilisera le nom de la personne qui appartient au véhicule.

render :json => @vehicles.to_jqgrid_json(
      ["person.name", :vehicle_type], 
      params[:page], 
      params[:rows], 
      @vehicles.total_entries 
     ) 
0

Vous avez besoin d'exprimer ce côté serveur de relations, par exemple en joignant les tables ensemble (bien que IIRC il sont des façons plus élégantes de le faire dans Rails):

SELECT p.person_name, v.vehicle_type 
     FROM vehicle v 
INNER JOIN person p ON p.person_id = v.person_id 

Ensuite, assurez-vous d'inclure person_name dans le colmodel de votre jqgrid.