2012-03-11 58 views
2

我有一個Rails應用程序,它有2個數據庫。Rails:將數據從1個控制器中的實例變量傳遞到另一個控制器中的實例變量

  1. 傳統DB與表叫:企業
  2. 常規發展DB自帶的Rails應用程序。

我在Businesses表中有要放入開發數據庫的數據。要做到這一點,我已經採取了以下措施:

  1. 設置應用程序,這樣我可以從企業DB閱讀,看看在瀏覽器中輸出。 我完成這通過創建一個模型BusinessBusinessesController類,其讀取從所述businesses表中的所有數據,並在一個實例變量@businesses

  2. 存儲的條目然後創建了一個模型被稱爲ListingListingsController。我想閱讀@businessesBusinessesController中的所有條目,並將它們存儲在ListingsController@listings中。

因此基本上所有我需要做的是採取存儲在一個實例變量數據,並將其保存在另一個實例變量。我不知道如何在Rails中做到這一點。

到目前爲止,我有以下類:

提供商家

class Business < ActiveRecord::Base 
    establish_connection "Listings_development" 
end 

class BusinessesController < ApplicationController 
    def get_all 
    @businesses = Business.all 
    end 

    def index 
    self.get_all 
    respond_to do |format| 
     format.html #index.html.erb 
    end 
    end 
end 

index.html.erb

<h1>Listing businesses</h1> 

<table> 
    <tr> 
    <th>Index</th> 
    <th>Name</th> 
    <th>Phone Number</th> 
    <th>Suite</th> 
    <th>Address</th> 
    <th>City</th> 
    <th>Province</th> 
    <th>Postal Code</th> 
    <th>Fax</th> 
    <th>Latitude</th> 
    <th>Longitude</th> 
    <th>Website</th> 
    </tr> 

    <% count = 0 %> 
    <% @businesses.each do |business| %> 
    <!--<%=business.inspect %> <br> <br>--> 
    <%count = count.to_i + 1 %> 
    <tr> 
    <td><%= business.bid %></td> 
    <td><%= business.company_name %></td> 
    <td><%= business.phone_number %></td> 
    <td><%= business.suite_number %></td> 
    <td><%= business.address %></td> 
    <td><%= business.city %></td> 
    <td><%= business.province %></td> 
    <td><%= business.postal_code %></td> 
    <td><%= business.fax_number %></td> 
    <td><%= business.latitude %></td> 
    <td><%= business.longitude %></td> 
    <td><%= business.website %></td>  
    <% end %> 
</table> 

<br /> 
<%= link_to 'New Business', new_business_path %> 

房源

class Listing < ActiveRecord::Base 
    attr_accessor :name, :telephone 

    def initialize(attributes = {}) 
    @name = attributes[:name] 
    @telephone = attributes[:telephone] 
    @latitude = attributes[:latitude] 
    @longitude = attributes[:longitude] 

    puts 'Created a new Listing' 
    end 
end 

class ListingsController < ApplicationController 
    def get_all 
    @listings = @businesses 
    # @listings = businesses_controller.get_all 
    end 

    def index 
    self.get_all 

    respond_to do |format| 
     format.html #index.html.erb 
    end 
    end 
end 

index.html.erb

<h1>Listings</h1> 

<p>This is where all Listings will show up</p> 
<%= @listings.inspect %> <br/> 
<%= @businesses.inspect %> 

當我去到URL

http://localhost:3000/businesses 

我可以看到所有的條目表在我的遺產DB - 企業表在瀏覽器

但是,當我去到網址:

http://localhost:3000/listings 

我剛纔看到的佔位符文本併爲@businesses &值我看到nil

因此很顯然@businesses變量在ListingsController類中不可訪問。我想知道如何在這兩個控制器之間傳遞最佳數據。

+0

請閱讀如何正確使用[SO格式化過程中(http://stackoverflow.com/editing-help)。 – 2012-03-11 21:25:23

+1

另外我認爲,如果你告訴我們你最好實現的是什麼,因爲不管它是什麼,你都不會以正確的方式去做。 – 2012-03-11 21:33:04

+0

道歉!仍在學習繩索SO :) – banditKing 2012-03-11 21:36:17

回答

5

你做錯了!您從不需要控制器以MVC模式與另一個控制器通信。您的模型應該是知道如何獲取數據的唯一責任人,因此您可以在兩個控制器中使用該模型。業務邏輯存在於模型中。

你應該用商業模式裏面人數控制器

@listings = Business.all 
+0

哇! 你很好。這解決了它。我一整天都在努力想辦法解決這個問題。非常感謝! – banditKing 2012-03-11 21:38:34

+0

這只是Rails的基本概念。我其實也是新來的:)但我沒有錯過那堂課 – 2012-03-11 21:43:20

相關問題