L'uso ha molti: attraverso
-
18-09-2019 - |
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.
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%>