Rails:将数据从1个控制器中的实例变量传递到另一个控制器中的实例变量

时间:2012-03-11 21:14:21

标签: ruby-on-rails ruby

我有一个Rails应用程序,它有2个数据库。

  1. 带有表格的旧数据库:业务
  2. rails app附带的常规开发数据库。
  3. 我在Businesses表中有数据要放入开发数据库中。为此,我采取了以下步骤:

    1. 设置应用程序,以便我可以从Businesses DB中读取并在浏览器中查看输出。 我通过创建模型BusinessBusinessesController类来完成此操作,该类读取businesses表中的所有数据并将条目存储在实例变量@businesses

    2. 然后我创建了一个名为ListingListingsController的模型。我想阅读@businessesBusinessesController的所有条目,并将其存储在@listings的{​​{1}}中。

    3. 因此,基本上我需要做的就是将数据存储在一个实例变量中并将其保存在另一个实例变量中。我不知道如何在Rails中这样做。

      到目前为止,我有以下课程:

      提供商家

      ListingsController

      index.html.erb

      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
      

      编目

      <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 %>
      

      index.html.erb

      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
      

      当我去url时

      <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 &amp;的价值观。 @businesses我看到@listings

      很明显,nil类中无法访问@businesses变量。我想知道如何在这两个控制器之间传递数据。

1 个答案:

答案 0 :(得分:5)

你做错了!您永远不需要控制器与MVC模式中的另一个控制器通信。您的模型应该是唯一负责知道如何获取数据的模型,因此您将在两个控制器中使用该模型。商业逻辑生活在模特身上。

您应该在列表控制器中使用业务模型

@listings = Business.all