Domanda

Utilizzando has_many => tramite associazione.

Ecco cosa ho.

:modello di pianificazione

has_many :acttypes
has_many :actcategories
has_many :acts, :through => :actcategories

:agisce modello

belongs_to :acttype
has_many :actcategories
has_many :plannings, :through => :actcategories

:modello actcategories

named_scope :theacts, lambda { |my_id|
{:conditions => ['planning_id = ?', my_id] }} 
belongs_to :act
belongs_to :planning

:modello acttype

has_many :acts

Il mio problema inizia qui.Devo mostrare tutto Atti da ciascuno Tipo di atto da Pianificazioni questo fa parte del associazione di categorie di attiIn questo momento sto ricevendo tutti gli atti e mi sto perdendo associazione di categorie di atti.

Controllore della pianificazione

def show
@planning = Planning.find(params[:id])
@acttypes = Acttype.find(:all, :include => :acts)
@acts = Actcategory.theacts(@planning)
end

Visualizzazione dello spettacolo di pianificazione

<% @acttypes.each do |acttype|%>
<%= acttype.name %>

<% @acts.each do |acts| %>
<li><%= link_to acts.act.name, myacts_path(acts.act, :planning => @planning.id) %></li>
<% end %>
<% end -%>

Grazie per qualsiasi aiuto.

È stato utile?

Soluzione

Penso che la cosa fondamentale che ti manca è che i cercatori e gli ambiti denominati restituiscono solo la classe su cui vengono chiamati.

@acts = Actcategory.theacts(@planning)

@acts sono tutte le categorie di Act in cui actcategories.planning_id = @planning.id.Non hanno necessariamente il tipo di atto richiesto.

In realtà, quello che penso che tu stia cercando è questo ambito denominato:

class Act < ActiveRecord::Base
  named_scope :with_planning, lambda do |planning_id|
   { :joins => :actcategories, 
    :conditions => {:actcategories => {:planning_id => planning_id}}
   }
  ...
end

Che limita gli atti a quelli associati alla pianificazione data.A questa si può chiedere ad un'associazione di limitare gli atti collegati a quelli legati ad una specifica progettazione.

Esempio:@acts contiene atti di acttype, x, associati alla pianificazione, y.

@acts = Acttype.find(x).acts.with_planning(y)

Con questo ambito denominato questo codice dovrebbe realizzare ciò a cui miravi.

controllore:

def show
  @planning = Planning.find(params[:id])
  @acttypes = Acttype.find(:all, :include => :acts)
end

visualizzazione:

<% @acttypes.each do |acttype| %>
<h2> <%= acttype.name %><h2>
  <% acttype.acts.with_planning(@planning) do |act| %>
    This act belongs to acttype <%= acttype.name%> and 
     is associated to <%=@planning.name%> through 
     actcatgetories: <%=act.name%>
  <%end%>
<%end%>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top