2016-07-23 67 views
0

我从一个月开始学习rails。我正在建立一个网站,学习越来越多。但自1周以来我被封锁了...我尝试了很多东西,在谷歌上搜索。但是,没有什么工作:(Rails如何显示两个数据库关联

所以我有4个数据库: 1)露营(杆状) 2)区(类别) 3)DEPARTEMENT(州) 3)威乐(市)

我想显示特定区域或/和Departement或/和ville的Camping(post)。我的参数可以是ID或:slug。

因此,当用户继续exemple.com/regions/1时,我想显示当前区域的出发列表并为所有此区域进行露营。

点击一个部门exemple.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

很好,看起来你有点困惑与活动记录关联。

首先,我们从数据库开始。部门应该有一个id和一个region_id有一个成功的:belongs_to region

你声明你的关系的方式是好的,但请记住rails放置约定优于配置。所以,在你的部门表中有一个department_id是没有必要的。

你的routes.rb似乎也很好,至少对于你想要做的事情。

所以,在我们的region_controller。RB你可以简单地去您的详细方法(或任何你有一个特定的视图),只要你实例化一个对象在你的视图中显示,您可以:

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

要访问的值协会。

那么,在您看来,您可以:

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

您不必在控制器中明确声明的关系,因为它是在你的模型已经声明。

您可以使用Rails控制台查看您的关系。

简单。 rails console您的终端/ cmd,然后就可以,例如:

region = Region.first 
region.departements 

,这应该显示与该REGION_ID属于该区域的对象的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的机会! 一个bientôt!

+0

@nicolaswecandoit检查更新的答案。我错误地添加了一个新的答案。 –

相关问题