2 Stimmen

Die Verwendung hat viele :durch

Verwendung von has_many => durch Assoziation.

Hier ist, was ich habe.

Planungsmodell

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

acts model

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 fängt hier an. Ich muss alle zeigen Handlungen von jedem Akt Typ de Planungen die Teil des actcategories Verein Im Moment bekomme ich alle Akte und vermisse die actcategories Verein .

Controller Planung

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

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

Danke für jede Hilfe.

1voto

EmFi Punkte 23295

Ich denke, das Wichtigste, was Sie übersehen, ist, dass Finder und benannte Bereiche nur die Klasse zurückgeben, für die sie aufgerufen werden.

@acts = Actcategory.theacts(@planning)

@acts sind alle Act-Kategorien, in denen actcategories.planning_id = @planning.id . Sie haben nicht unbedingt die erforderliche Art von Handlung.

Ich glaube, was Sie wirklich 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

Diese beschränkt die Handlungen auf diejenigen, die mit der gegebenen Planung verbunden sind. Dies kann bei einer Assoziation aufgerufen werden, um die verknüpften Handlungen auf diejenigen zu beschränken, die mit einer bestimmten Planung verbunden sind.

Beispiel: @acts enthält Handlungen der Handlungsart x, die mit der Planung y verbunden sind.

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

Mit diesem benannten Geltungsbereich sollte dieser Code das erreichen, was Sie beabsichtigen.

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X