Rails如何显示与两个数据库的关联

Rails How display with two database association

我学习 rails 一个月了。我正在制作一个用于学习更多知识的网站。但是自从 1 周以来我就被屏蔽了...我尝试了很多东西,在 google 上搜索。但没有任何效果:(

所以我有 4 个数据库: 1)野营(喜欢post) 2)地区(catégory) 3)部门(州) 3) Ville (城市)

我想显示特定区域 or/and 部门 or/and ville.My 的露营 (post) 参数可以是 ID 或 :slug。

所以当用户继续举例时。com/regions/1我想显示当前地区的部门列表和所有该地区的露营地。

点击一个部门示例后。com/nameofregion/nameofdepartement我想显示该部门的所有城市和当前部门的所有露营地。

目前我正在努力显示当前区域的特定部门。我认为 region_id 是解决方案,但我迷路了...没有任何效果! 那么,如果你能帮助我?坦克:)

(Ps 我是法国人)

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

所以怎么了?

感谢您的帮助:)

嗯,看来您对 Active Record Associations 有点困惑。

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

您声明关系的方式很好,但请记住 rails 约定优于配置。因此,在您的部门 table 中拥有 department_id 是没有必要的。

您的 routes.rb 似乎也不错,至少对于您正在尝试做的事情而言是这样。

因此,在我们的 region_controller.rb 中,您可以简单地转到您的 detail 方法(或您对特定视图使用的任何方法),并且每当您实例化一个对象以显示在您的视图中时,您可以:

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

从关联访问值。

因此,在您看来您可以:

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

您不必在控制器中显式声明关系,因为它已在您的模型中声明。

您可以使用 Rails 控制台查看您的关系 'on the go'。

简单。 rails console 在你的 terminal/cmd 然后你可以例如:

region = Region.first
region.departements

这应该显示与属于区域对象 ID 的 region_id 关联的所有部门。

更新

好的,让我们检查一些您需要的东西,以便使用 rails 的强大功能。

您的模型必须是单一的(例如:region.rb、department.rb)

您的控制器也是单数的,附加了 _controller (region_controller.rb, department_controller.rb)

所以,如果您确定这一切都已设置好,请记住,在您的 region_controller.rb 中的 detail 方法中,您应该有这样的内容:

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

然后,在您看来,您可以通过调用 department 的复数形式来获取相关数据,就像这样

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

注意错别字!特别是在单数和复数之间。

此外,请确保您的数据库确实具有您要求的值

如有疑问,只需检查您的迁移并确保运行它们:

rake db:migrate 

如果你成功了,请告诉我!

好机会! 一个 bientôt!