Соединение таблиц в Rails - PullRequest
       1

Соединение таблиц в Rails

0 голосов
/ 24 сентября 2010

Модель Table City

class TableCity < ActiveRecord::Base
  has_many :near_cities, :foreign_key => "nearcity_id"  
end

Модель NearCity

class NearCity < ActiveRecord::Base
  belongs_to :table_city
end

Контроллер

@table_cities = TableCity.find(:all, :conditions=>{:state => params[:gm], :language => params[:sp]}, :include => :near_cities)

View

<% @table_cities.each do |table_city| %>
  <%= table_city.name %>
  <% table_city.near_cities.each do |city| %>        
    <%= city.text %>
  <% end %>   
<% end %>   

Это не работает, пожалуйста, дайте мне несколько советов.

Ответы [ 2 ]

2 голосов
/ 24 сентября 2010

Ваши отношения выглядят странно.NearCity принадлежит TableCity, поэтому вы должны хранить внешний ключ TableCity в таблице near_cities.Для этого убедитесь, что в вашей таблице near_cities есть столбец с именем table_city_id.

. Ваши модели могут быть просто:

class TableCity < ActiveRecord::Base
  has_many :near_cities  
end

class NearCity < ActiveRecord::Base
  belongs_to :table_city
end
0 голосов
/ 24 сентября 2010

в ваших моделях

class TableCity < ActiveRecord::Base
  has_many :near_cities  
end

class NearCity < ActiveRecord::Base
  belongs_to :table_city
end

В ваших миграциях

class CreateTableCities < ActiveRecord::Migration
  def self.up
    create_table :table_cities do |t|
      t.string :name
      t.timestamps
    end
  end

  def self.down
    drop_table :table_cities
  end
end

class CreateNearCities < ActiveRecord::Migration
  def self.up
    create_table :near_cities do |t|
      t.string :name
      t.references :table_city
      t.timestamps
    end
  end

  def self.down
    drop_table :near_cities
  end
end

И, наконец, в вашем контроллере вы можете сделать это

@table_city = TableCity.find(params[:id]) #one TableCity
@near_cities = @table_city.near_cities    # all near_cities associated with the TableCity
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...