2016-07-23 5 views
0

Я изучаю рельсы с месяца. Я делаю сайт для обучения все больше и больше. Но с 1 недели я заблокирован ... Я много разбираюсь, ищу в google. Но ничего работа :(Rails Как отображать с двумя ассоциациями базы данных

Так что у меня 4 базы данных: 1) Кемпинг (например, пост) 2) Регион (КАТЕГОРИЯ) 3) Departement (состояние) 3) Ville (город)

Я хочу отображать Camping (post) для определенного региона или/или департамента или/или ville.My параметры могут быть ID или: slug.

Поэтому, когда пользователь идет на exampleple.com/regions/1, я хочу показать список департаментов для текущего региона и кемпинга для всего этого региона.

После того, как вы нажмете на один из отделов example.com/nameofregion/nameofdepartement, я хочу показать весь город для этого департамента и всех кемпингов для текущего департамента.

На данный момент я работаю над тем, чтобы показать конкретный отдел для текущего региона. Я думаю, что region_id был решением, но я потерял ... и ничего не работает! Итак, если вы можете мне помочь? Танки :)

(Пс я м французском)

Table DEPARTEMENTS 
CREATE TABLE "departements" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "description" text, "nomdep" varchar, "departement_id" integer, "slug" varchar, "region_id" integer, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) 

TABLE REGIONS 
CREATE TABLE "regions" ("id" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "descriptionregion" text, "nomderegion" text, "slug" text, "created_at" datetime NOT NULL, "updated_at" datetime NOT NULL) 

routes.rb

get 'departements' => 'departements#index' 
get 'regions' => 'regions#index' 
get 'regions/:region_id' => 'regions#detail' 

Region.rb

class Region < ActiveRecord::Base 
    has_many :departements 
    has_many :villes 
    has_many :campings 
end 

Departement.rb

class Departement < ActiveRecord::Base 
    belongs_to :region 
end 

Regions_controller

class RegionsController < ApplicationController 
def index 
@regions = Region.all 
end 

def detail 
#@departementids = Departement.all 
#@departementids = Departement.find_by_region_id(13) 
@departements = Departement.includes(:region) 
end 
end 

Detail.html.erb

<% @departements.each do |departement| %> 
<p><%= departement.region.id %></p> 
<% end %> 

// And all the tests...// 
<%# for departement in @departementids %> 
<p><%#= departement.description %></p> 
<%#end%> 

<%# @departement_ids.each do |region| %> 
<li><%#= region.nom %></li> 
<%# end %> 

<%#@departement_ids.each do |departement| %> 
<%#= departement.region_id %> 
<%# end %> 


<%# @departementsdet.each do |nomdep, regions_id| %> 
<%#= @departementsdet.description %> 
<%#end%> 


<%#@departementsdet.each do |departement| %> 
<%#= @departement.description %> 
<%# end %> 

Так что случилось?

Спасибо за вашу помощь :)

ответ

2

Ну, это выглядит, вы немного запутался с Active Record Ассоциаций.

Прежде всего, давайте начнем с вашей базы данных. Отделы должны иметь идентификатор и region_id для успешной работы :belongs_to region

Как вы заявили, что ваши отношения прекрасны, но помните, что рельсы устанавливают соглашение по конфигурации. Таким образом, наличие таблицы department_id в таблице отделов не требуется.

Ваши маршруты.rb также кажутся прекрасными, по крайней мере, за то, что вы пытаетесь сделать.

Итак, в нашем регионе_контроллер.Р.Б. вы можете просто пойти в ваш метод детализации (или любой другой метод, который вы имеете для конкретной целью) и всякий раз, когда вы создать экземпляр объекта для отображения на ваш взгляд, вы можете:

@region = Region.find(:id) @region.departements

Для доступа к значению из ассоциация.

Таким образом, по вашему мнению, вы можете:

<℅ @region.departments.each do |department| %>

Вы не должны явно объявить отношения в контроллере, так как он уже объявлен в моделях.

Вы можете видеть ваши отношения «на ходу» с помощью Rails Console.

Просто. rails console на вашем терминале/CMD, а затем вы можете, например:

region = Region.first 
region.departements 

И это должно показать все отделы, связанные с этим region_id принадлежащего идентификатору объекта региона.

UPDATE

Окей, давайте проверим некоторые вещи, которые вам нужны для того, чтобы использовать удивительную функциональность рельсов.

Ваши модели должны быть особыми (например: region.rb, department.rb)

Ваши контроллеры также сингулярные с _controller приложенном (region_controller.rb, department_controller.rb)

Итак, если вы уверены, это все готово помнить, что в вашем методе подробно внутри вашего region_controller.rb вы должны иметь что-то вроде этого:

@region = Region.find(params[:id]) 

Затем, по вашему мнению, вы можете получить связанные данные путем вызова множественного числа отдела, как это

<% @region.departaments.each do |department| %> 
<℅= department.name %> 
<%= department.any_value ℅> 

Остерегайтесь опечаток! Специально между единственными и множественными числами.

Кроме того, убедитесь, что база данных на самом деле имеет значение, вы призывающие к

Если сомневается, просто проверить миграции и убедитесь, чтобы запустить их:

rake db:migrate 

Позволь мне знать, если вам удастся заставить его работать!

Bonne шанс! A bientôt!

+0

@nicolaswecandoit проверить обновленный ответ. Я добавил новый ответ по ошибке. –

 Смежные вопросы

  • Нет связанных вопросов^_^