Frage

Mit has_many => durch Assoziation.

Hier ist, was ich habe.

: Planungsmodell

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

: Akte Modell

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

: actcategories Modell

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

: acttype Modell

has_many :acts

Mein Problem beginnt hier. Ich brauche alle zeigen Acts von jedem Act Typ Planungen das ist ein Teil der actcategories Vereinigung Im Moment bin ich immer alle Handlungen und fehlt die actcategories Vereinigung .

Planning-Controller

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

Planung Sicht anzeigen

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

Vielen Dank für jede Hilfe.

War es hilfreich?

Lösung

ich glaube, der Schlüssel, was Ihnen fehlt, ist, dass Findern und Scopes nur die Klasse zurückkehren, dass sie auf heißen.

@acts = Actcategory.theacts(@planning)

@acts sind alle Actcategories wo actcategories.planning_id = @planning.id. Sie müssen nicht den Akt Typ erforderlich.

Wirklich, was ich denke, nach dem Sie suchen ist dieser benannte Bereich:

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

Welche Handlungen diejenigen begrenzt mit der gegebenen Planung verbunden. Dies kann auf einer Vereinigung genannt wird die verknüpften Akte, die die mit einer spezifischen Planung gering zu halten.

Beispiel: @acts enthält Akte acttype, x, die mit der Planung verbunden sind, y

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

Mit diesem benannten Umfang sollte dieser Code erreichen, was Sie für zielten.

Controller:

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

Ansicht:

<% @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%>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top