簡體   English   中英

Rails:將數據從一個控制器中的實例變量傳遞到另一個控制器中的實例變量

[英]Rails: passing data from instance variable in 1 controller to instance variable in another controller

我有一個有2個數據庫的Rails應用程序。

  1. 帶有表的舊版數據庫:Businesses
  2. rails應用程序附帶的常規開發數據庫。

我在Businesses表中有要放入開發數據庫的數據。 為此,我采取了以下步驟:

  1. 設置應用程序,以便我可以從Businesses DB中讀取並在瀏覽器中查看輸出。 我通過創建模型BusinessBusinessesController類來完成此任務,該類從businesses表中讀取所有數據,並將條目存儲在實例變量@businesses

  2. 然后,我創建了一個名為ListingListingsController的模型。 我想從閱讀所有條目@businessesBusinessesController並將其存儲在@listingsListingsController

因此,基本上我要做的就是獲取存儲在一個實例變量中的數據並將其保存在另一個實例變量中。 我不確定如何在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 %>

當我去網址

http://localhost:3000/businesses

我可以在瀏覽器中查看舊數據庫-企業表中所有條目的表

但是當我去網址:

http://localhost:3000/listings

我只看到占位符文本以及@businesses@listings值,我看到的是nil

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

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

您應該在清單控制器中使用業務模型

@listings = Business.all

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM