2017-04-20 45 views
1

我想从tag/show.html.erb中获取如下所示的多对多关系表(Tag-Service-Category)中的数据。我想从多个表中获取数据

class Tag < ActiveRecord::Base 
    has_many :service_tags 
    has_many :services, through: :service_tags 
end 

class ServiceTag < ActiveRecord::Base 
    belongs_to :service 
    belongs_to :tag 
end 
class Service < ActiveRecord::Base 
    has_many :service_tags 
    has_many :tags, through: :service_tags 
    has_many :service_categories 
    has_many :categories, through: :service_categories 
end 
class ServiceCategory < ActiveRecord::Base 
    belongs_to :service 
    belongs_to :category 
end 
class Category < ActiveRecord::Base 
    has_many :service_categories 
    has_many :services, through: :service_categories 
end 

我写了这样的代码,但它不工作。 @tag = Tag.find(PARAMS [:编号])

<% @tag.services.each do |service| %> 
<% service.categories.each do |category| %> 
     <span class="category" class="<%= category.id %>"><%= category.name %></span> 
     <% end %> 
<% end %> 

控制器/ tags_controller.rb

class TagsController < ApplicationController 
    def show 
     @tag = Tag.find(params[:id]) 
     @tags = Tag.all 
    end 
end 
+0

您可以添加控制器吗? –

+0

谢谢你的帮助!是的。 – Dan

+0

你的意思是它不工作?有没有错误,或只是没有显示出来? –

回答

0

虽然你有分贝的关系是正确的,你仍然需要叫出连接模型。因为你正在做一对双关系,所以你需要创建一个中间数组。尝试将此添加到您的视图中:

<% services_array = [] %> 
<% @tag.service_tags each do |service_tag| %> 
    <% services_array << service_tag.service %> 
<% end %> 
<% services_array.each do |service| %> 
    <span class="category"> 
    <%= service.service_category.category.id %> 
    <%= service.service_category.category.name %> 
    </span> 
<% end %> 
+0

谢谢你的帮助!我试过你的,但我不能得到service_categories ... NoMethodError:未定义的方法'service_categories'为# Dan

+0

没问题。我犯了一个错误。我刚刚更新了答案。希望它现在会输出类别ID和名称。我从一个班里拉出了ID,因为它看起来不合适,但是你可以配置那个部分。 –

+0

谢谢你的帮助。嗯...我再次尝试,但它说未定义的方法。 ActionView :: Template :: Error:未定义的方法'service_category'为nil:NilClass在我的tags_controller.rb中是否有任何错误? – Dan