Forum: Italian Ruby user group Join tra tabelle

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
9c2bf699672a447d8ac17c589279faed?d=identicon&s=25 Fabrizio Taddei (buzman1)
on 2007-05-02 17:19
(Received via mailing list)
Ciao a tutti,
sono alle prime armi di Ruby on Rails. Ho creato la mia piccola
applicazione web ed ho una tabella links che contiene i link da
visualizzare in una pagina del sito. Volendo dividere i link in
categorie ho creato una tabella categories.

Questo è  il codice SQL delle due tabelle:

DROP TABLE IF EXISTS `xbrail2_production`.`categories`;
CREATE TABLE  `xbrail2_production`.`categories` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name_en` varchar(255) default NULL,
  `name_it` varchar(255) default NULL,
  PRIMARY KEY  USING BTREE (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

DROP TABLE IF EXISTS `xbrail2_production`.`links`;
CREATE TABLE  `xbrail2_production`.`links` (
  `id` int(11) NOT NULL auto_increment,
  `site_name` varchar(255) default NULL,
  `subtitle_en` text,
  `abstract_en` text,
  `category` varchar(255) default NULL,
  `url` varchar(255) default NULL,
  `top_site` tinyint(1) default NULL,
  `subtitle_it` text,
  `abstract_it` text,
  `categoryId` int(10) unsigned default '1',
  PRIMARY KEY  USING BTREE (`id`),
  KEY `FK_links_categories` (`categoryId`),
  CONSTRAINT `FK_links_categories` FOREIGN KEY (`categoryId`) REFERENCES
`categories` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Nel model Link ho messo belongs_to :categories nel model Category ho
messo has_many :links.
Nella pagina di amministrazione del sito ho la lista completa  dei link
con il campo categoryId che mi visualizza l'identificativo (numero
intero) della categoria.
Come posso fare a visualizzare il nome della categoria al posto del id?
Io ho provato dichiarare un metodo nel model link che fa una join tra le
due tabelle:

  def find_category_name
    name = Link.find(:all, :joins => "INNER JOIN categories on
categories.id = categoryId")
 end

Purtroppo non sò se sono sulla buona strada e se sì come andare avanti.

Vi srivo il codice della view list che visualizza la lista dei link:
<% for link in @links %>
       <tr valign="top" class="links-content">
          <td>
           <%=h(link.site_name) %><br />
          </td>
          <td>
           <%=h(link.category) %><br />
          </td>
          <td>
           <%=h(link.categoryId) %><br />
          </td>...

Questo è il controller con il metodo che crea la list

def list
    @link_pages, @links = paginate :links, :per_page => 15
  end

Qualche suggerimento? Scusate la mia domanda banale e probabilmente
anche la poca chiarezza nell'esporre il problema ma purtroppo ho poche
idee e ben confuse.

Vi ringrazio aticipatamente per le risposte e la pazienza.

Saluti

Taddei Fabrizio




      ___________________________________
L'email della prossima generazione? Puoi averla con la nuova Yahoo!
Mail: http://it.docs.yahoo.com/nowyoucan.html
73d7c6e24b8b321a0bb1d9f2a4fcdf9a?d=identicon&s=25 tarini (Guest)
on 2007-05-02 18:10
(Received via mailing list)
se fai link.category.name_it ?


--
everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away
9c2bf699672a447d8ac17c589279faed?d=identicon&s=25 Fabrizio Taddei (Guest)
on 2007-05-02 20:14
tarini wrote:
> se fai link.category.name_it ?


Ciao tarini, grazie per la risposta ho provato a mettere nella view list
link.category.name_it come hei suggerito,
ma mi dà questo errore:

ActionView::TemplateError (undefined method `name_it' for "XBRL in the
world":String) on line #25 of
vendor/extensions/xbrlink/app/views/admin/links/list.rhtml:
22:        <%=h(link.category) %><br />
23:       </td>
24:       <td>
25:        <%=h(link.category.name_it) %><br />
26:       </td>
27:       <td>
28:        <%=h(link.url) %><br />

Qualche idea?

Ciao e grazie
73d7c6e24b8b321a0bb1d9f2a4fcdf9a?d=identicon&s=25 tarini (Guest)
on 2007-05-02 21:35
(Received via mailing list)
guarda... non so aiutarti... forse è un problema l'underscore...

Il 02/05/07, Fabrizio Taddei <fabrizio_taddei@yahoo.it> ha scritto:
> world":String) on line #25 of
>
>
--
everything has got to end sometime we were satellites drifting off into
space
vega 4 - burn and fade away
9c2bf699672a447d8ac17c589279faed?d=identicon&s=25 Fabrizio Taddei (Guest)
on 2007-05-03 08:58
Grazie lo stesso tarini...

Qualcun altro potrebbe aiutarmi?
8d4a94f890b9226726e6de7f71c4db49?d=identicon&s=25 Rob Clarke (Guest)
on 2007-05-03 10:06
(Received via mailing list)
Nel modello Link scrivi "belongs_to :category" (invece di categories)

Sarebbe meglio usare category_id invece di categoryId. Così Ruby on
Rails può usarlo automaticamente per fare i join.

Altrimenti dovresti fare:

class Category
  has_many :links, :foreign_key => "categoryId"
end

class Link
  belongs_to :category, :foreign_key => "categoryId" # invece di
categories
end

Dopo, puoi fare "name = Link.find(:first).category.name" o

class Link
  def category_name
    self.category.name rescue "n.d."
  end
end
9c2bf699672a447d8ac17c589279faed?d=identicon&s=25 Fabrizio Taddei (Guest)
on 2007-05-03 11:31
Rob Clarke wrote:
> Nel modello Link scrivi "belongs_to :category" (invece di categories)
>
> Sarebbe meglio usare category_id invece di categoryId. Cos� Ruby on
> Rails pu� usarlo automaticamente per fare i join.

Funziona grazie mille Rob!!!!
This topic is locked and can not be replied to.