繁体   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