2012-03-07 15 views
0

使用Rails 3.1和MySQL,我的以下問題:我創建了數組@addresses:的Rails 3.1和表Mysql的位置

@registry_all = Registry.all 
@addresses = @registry_all.map{|reg| [ reg.id, reg.indirizzo_1, reg.indirizzo_2, reg.indirizzo_3, reg.indirizzo_4 ]}.sort 

,這是相對於註冊模型:

rails g model registry id:integer, created_at:datetime, updated_at:datetime, name:string, cod_fiscale:string :limit=>16, p_iva:string :limit=>11, indirizzo_1:text, indirizzo_2:text, indirizzo_3:text, indirizzo_4:text ,telefono1:string :limit=>25, telefono2:string :limit=>25 

因此,array @addresses包含所有註冊表的地址,現在我想檢索由單個註冊表擁有的所有地址,並通過registry.id進行查找。我的意思是,我想類似的東西到:

@ addresses.find [registry.id]

不過關,當然這樣做,(假設registry.id具有等於30),我檢索所有地址由array @addresses的第30個元素擁有,而不是由registry.id擁有的地址。這應該只適用於我所尋找的對象是數組地址的第30個元素,換句話說,只有當這個對象是第30個內部註冊表mysql表 我該怎麼做?

回答

0

如果我理解的很好,那麼在註冊表數據庫表的一行中,註冊表的所有4個地址[1]的名稱分別爲indirizzo_1,indirizzo_2,indirizzo_3,indirizzo_4,並且您希望這些地址位於數組中。你可以這樣做:

registry = Registry.find(the_registry_id) 
return [registry.indirizzo_1, registry.indirizzo_2, registry.indirizzo_3, registry.indirizzo_4] 

找到你得到與該ID的註冊表,然後您使用返回4個屬性作爲數組。

但是從設計的角度來看,我不會爲地址添加4個字段,但我會使用一對多的關係,因爲註冊表可以有很多地址。

[1] 「indirizzo」 是意大利

0

我創建了一個遷移有點像你的 「地址」(減:限制)

class CreateRegistries < ActiveRecord::Migration 
     def change 
     create_table :registries do |t| 
      t.integer :id 
      t.datetime :created_at 
      t.datetime :updated_at 
      t.string :name 
      t.string :cod_fiscale 
      t.string :p_iva 
      t.text :indirizzo_1 
      t.text :indirizzo_2 
      t.text :indirizzo_3 
      t.text :indirizzo_4 
      t.string :telefono1 
      t.string :telefono2 

      t.timestamps 
     end 
     end 
    end 

我假設你已經做了:

$ bundle exec rake db:migrate 

一個簡單的方法來認爲這是打開一個軌道控制檯:

rails c 

我創建5點登記處的記錄是這樣的:

Registry.create(name:"name5", cod_fiscale:"cod_fiscale", p_iva:"p_iva", indirizzo_1:"txt", indirizzo_2:"txt", indirizzo_3:"txt", indirizzo_4:"txt" ,telefono1:"12345") 

所以現在打字:

Registry.count 

給我:

1.9.2-p180 :017 > Registry.count 
(0.2ms) SELECT COUNT(*) FROM "registries" 
=> 6 

您現在可以使用.find方法是這樣的:

Registry.find(1) 

其中(1)是我們擁有的6條記錄之一的標識。

如果在一個控制器利用這一點,將是這樣的:

@registry = Registry.find(params[:id]) 

然後,你可以搶indirizzo通過鍵入:

Registry.find(1).indirizzo_1 

這給:

1.9.2-p180 :036 > Registry.find(1).indirizzo_1 
Registry Load (0.3ms) SELECT "registries".* FROM "registries" WHERE "registries"."id" = ? LIMIT 1 [["id", 1]] 
=> "txt" 

設我知道你是否需要更多的幫助,並隨時提供更多的產出。