2016-04-12 2 views
-3

Я новичок в рельсах, и в моем проекте у меня есть 2 класса, у которых есть отношения между ними. Проблема в том, что они не могут перечислять службы с органами. Ниже приведен код, у меня есть:Ссылки между классными рельсами

modelos 

class Admin::Organ 
    include Mongoid::Document 
    include Mongoid::Search 
    include Mongoid::Pagination 

    field :name, type: String 
    field :address, type: String 
    field :acronym, type: String 
    field :phones, type: String 
    field :emails, type: String 
    field :image, type: String 
    field :permalink, type: String 
    field :schedules, type: Array 
    field :coordinates, type: Hash 

    has_many :services, class_name: "Service" 
    has_many :units, class_name: "Admin::Unit" 

    before_save :touch_permalink 

    search_in :name 

    paginates_per 10 

    def url 
    "/orgao/#{permalink}" 
    end 

    private 
    def touch_permalink 
     self.permalink = self.name.parameterize 
    end 
end 



class Service 
    include Mongoid::Document 
    include Mongoid::Search 
    include Mongoid::Pagination 

    field :name, type: String 
    field :acronym, type: String 
    field :popular_names, type: Array 
    field :description, type: String 
    field :free, type: Boolean 
    field :applicants, type: Array 
    field :estimated_time, type: Hash 
    field :steps, type: Array 
    field :permalink, type: String 
    field :other_informations, type: String 

    belongs_to :organ, class_name: "Admin::Organ" 
    has_and_belongs_to_many :units, class_name: "Admin::Unit" 
    has_and_belongs_to_many :audiences, class_name: "Admin::Audience" 
    has_and_belongs_to_many :categories, class_name: "Admin::Category" 

    before_save :touch_permalink 

    search_in :name, :popular_names 

    paginates_per 10 

    def organ_id 
     read_attribute(:organ_id).to_s 
    end 

    def url 
     "/servico/#{permalink}" 
    end 

    private 
     def touch_permalink 
     self.permalink = self.name.parameterize 
     end 
end 


#controlers 
class ServicesController < ApplicationController 
    def index 
     @organs = Admin::Organ.all 
     @services = Service.page(params[:page].to_i).per(3) 
    end 

    def show 
     @service = Service.where(permalink: params[:permalink]).first 

    end 
end 


class OrgansController < ApplicationController 
    def index 
     @organs = Admin::Organ.page(params[:page]).per(2)  
    end 

    def show 
     @organ = Admin::Organ.where(permalink: params[:permalink]).first 
     @organs = Admin::Organ.page(params[:page]).per(1) 
    end 
end 

#call in index.html 
<%= organs.services.name%> 

Это, кажется, возвращается ошибка, когда я запускаю его

+0

Просьба показать стек. – born4new

+0

Не могли бы вы добавить любую информацию о конкретной ошибке, которую вы получаете с этим подходом? – ZubatMan

+0

<% = органы.services.name%> это возвращает имя «Сервис»! Я хочу, чтобы кто возвращал имя службы. –

ответ

0

Примечание: На Монго отношений при вызове метода отношения (например, услуги в вашем случае) все связанных с ним документов. Также для плагина разбиения на страницы, который вы используете (я предполагаю kaminari по синтаксису), это также вернет коллекцию документов.

Если это так, то можно было бы ожидать, что у вас есть представление для органов, которые есть что-то немного, как это:

<% @organs.each do |organ| %> 
    <div>Name: <%= organ.name %></div> 
    <div>Address: <%= organ.address %></div> 
    <div>Services:</div> 
    <% organ.services.each do |service| %> 
     <div>Name: <%= service.name %></div> 
     <div>Acronym: <%= service.acronym %></div> 
    <% end %> 
<% end %> 

<%= paginate @organs %> 

Вы заметите, что распечатывать услуги, которые вы должны сначала иметь ручку в текущем документе в @organs, а затем вам нужно выполнить итерацию сервисов внутри него. Если вы должны назвать имя (которое является методом отношения), вы получите имя отношения (я считаю, что это то, что вы видите).

Надеюсь, это поможет. Я должен был сделать некоторые предположения между линиями, вернуться ко мне, если вам нужна дополнительная помощь.

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