【问题标题】:Rails How display with two database associationRails 如何显示与两个数据库的关联
【发布时间】:2016-07-23 15:58:21
【问题描述】:

我一个月以来一直在学习 Rails。我正在做一个网站来学习更多。但是自从 1 周以来我被阻止了......我尝试了很多东西,在谷歌上搜索。但没有任何工作:(

所以我有 4 个数据库: 1) 露营(如帖子) 2) 地区(类别) 3)部门(州) 3) 维尔(市)

我想显示特定区域或/和部门或/和 ville 的露营(帖子)。我的参数可以是 ID 或 :slug。

因此,当用户访问 example.com/regions/1 时,我想显示当前区域的部门列表和所有该区域的露营。

点击一个部门后,example.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'

区域.rb

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

部门.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 %>

那怎么了?

感谢您的帮助:)

【问题讨论】:

    标签: ruby-on-rails database associations params


    【解决方案1】:

    好吧,看来您对 Active Record 关联有点困惑。

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

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

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

    因此,在我们的 region_controller.rb 中,您可以简单地转到您的详细方法(或您对特定视图拥有的任何方法),并且每当您实例化要在视图中显示的对象时,您都可以:

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

    从关联中访问一个值。

    因此,在您看来,您可以:

    &lt;℅ @region.departments.each do |department| %&gt;

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

    您可以使用 Rails 控制台“随时随地”查看您的关系。

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

    region = Region.first
    region.departements
    

    这应该显示与属于 Region 对象 id 的 region_id 关联的所有部门。

    更新

    好的,让我们检查一下您需要哪些东西才能使用 Rails 的强大功能。

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

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

    所以,如果你确定这一切都设置好了,请记住在你的 region_controller.rb 中的 detail 方法中你应该有这样的东西:

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

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

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

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

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

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

    rake db:migrate 
    

    如果你设法让它工作,请告诉我!

    好机会! 一个bientôt!

    【讨论】:

    • @nicolaswecandoit 检查更新的答案。我错误地添加了一个新答案。
    猜你喜欢
    • 2020-01-25
    • 2015-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-19
    • 1970-01-01
    • 2010-12-01
    相关资源
    最近更新 更多