2016-04-12 5 views
-3

Ich bin neu bei Schienen und in meinem Projekt habe ich 2 Klassen, die eine Beziehung zwischen ihnen haben. Das Problem ist, dass sie keine Dienstleistungen mit Organen auflisten können. Im Folgenden ist der Code, den ich habe:Links zwischen Klassenschienen

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

Dies scheint einen Fehler zurückkommen, wenn ich es laufen

+0

Bitte zeigen Sie den StackTrace. – born4new

+0

Könnten Sie bitte irgendwelche Informationen über den spezifischen Fehler, den Sie mit diesem Ansatz erhalten, hinzufügen – ZubatMan

+0

<% = organs.service.name%> Dies gibt den Namen "Service" zurück! Ich möchte den Namen des Services zurückgeben. –

Antwort

0

Hinweis: Bei Mongo Beziehungen, wenn Sie eine Beziehung Methode aufrufen (wie Dienstleistungen in Ihrem Fall) alle der damit verbundenen Dokumente werden zurückgegeben. Auch für das Paginierungs-Plugin, das Sie verwenden (ich nehme Kaminari durch die Syntax an), wird dies auch eine Sammlung von Dokumenten zurückgeben.

Wenn ja, könnte man erwarten, dass man einen Blick für Organe, die etwas ein wenig wie diese hat:

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

Sie werden feststellen, dass Sie zuerst müssen aus den Diensten drucken bemerken einen Griff haben auf dem aktuellen Dokument in @organs, und dann müssen Sie die darin enthaltenen Dienste iterieren. Wenn Sie den Namen anrufen (was eine Methode einer Beziehung ist), erhalten Sie den Beziehungsnamen (ich glaube, das ist, was Sie sehen).

Ich hoffe, das hilft. Ich musste zwischen den Zeilen raten, komm zurück, wenn du weitere Hilfe brauchst.

Verwandte Themen