Unter Verwendung hat viele: durch
-
18-09-2019 - |
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.
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%>