Rails: передача данных из переменной экземпляра в 1 контроллере в переменную экземпляра в другом контроллере - PullRequest
2 голосов
/ 12 марта 2012

У меня есть приложение Rails, которое имеет 2 базы данных.

  1. Старая БД с таблицей под названием: Бизнес
  2. обычная БД для разработки, которая поставляется с приложением rails.

У меня есть данные в таблице «Бизнес», которые я хочу поместить в БД разработки. Для этого я предпринял следующие шаги:

  1. Настройте приложение так, чтобы я мог читать из базы данных «Бизнес» и видеть результаты в браузере. Я достиг этого, создав модель Business и класс BusinessesController, который считывает все данные из таблицы businesses и сохраняет записи в переменной экземпляра @businesses

  2. Затем я создал модель под названием Listing и ListingsController. Я хотел бы прочитать все записи из @businesses в BusinessesController и сохранить их в @listings в ListingsController.

Таким образом, по сути, все, что мне нужно сделать, это взять данные, хранящиеся в одной переменной экземпляра, и сохранить их в другой переменной экземпляра. Я не уверен, как это сделать в Rails.

Пока у меня есть следующие классы:

Buisiness

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

Я вижу таблицу всех записей в моей прежней БД - таблица предприятий в браузере

Но когда я иду на URL:

http://localhost:3000/listings

Я вижу только текст заполнителя и для значений @businesses & @listings Я вижу nil.

Очевидно, что переменная @businesses недоступна в классе ListingsController. Мне интересно, как лучше всего передавать данные между этими двумя контроллерами.

1 Ответ

5 голосов
/ 12 марта 2012

Вы делаете это неправильно!Вам никогда не нужен контроллер, чтобы общаться с другим контроллером в шаблоне MVC.Ваша модель должна быть единственной ответственной, чтобы знать, как получить данные, поэтому вы должны использовать эту модель в обоих контроллерах.Бизнес-логика живет в моделях.

Вы должны использовать бизнес-модель внутри контроллера листингов

@listings = Business.all
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...