L'utilisation a beaucoup: par
-
18-09-2019 - |
Question
Utilisation has_many => par association.
Voici ce que j'ai.
: modèle de planification
has_many :acttypes
has_many :actcategories
has_many :acts, :through => :actcategories
: modèle actes
belongs_to :acttype
has_many :actcategories
has_many :plannings, :through => :actcategories
: modèle actcategories
named_scope :theacts, lambda { |my_id|
{:conditions => ['planning_id = ?', my_id] }}
belongs_to :act
belongs_to :planning
: modèle acttype
has_many :acts
Mon problème commence ici. Je dois montrer tous les Actes chaque Loi type Plannings qui fait partie de la association actcategories En ce moment, je reçois tous les actes et manquant l'association actcategories .
Contrôleur de planification
def show
@planning = Planning.find(params[:id])
@acttypes = Acttype.find(:all, :include => :acts)
@acts = Actcategory.theacts(@planning)
end
Planification Afficher la vue
<% @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 -%>
Merci pour toute aide.
La solution
Je pense que la chose clé que vous manque est que trouveurs et les champs nommés ne renvoient que la classe qu'ils ont appelé.
@acts = Actcategory.theacts(@planning)
@acts est tous les Actcategories où actcategories.planning_id = @planning.id
. Ils ne sont pas nécessairement le type d'acte requis.
Vraiment, ce que je pense que vous êtes à la recherche est ce champ nommé:
class Act < ActiveRecord::Base
named_scope :with_planning, lambda do |planning_id|
{ :joins => :actcategories,
:conditions => {:actcategories => {:planning_id => planning_id}}
}
...
end
Ce qui limite les actes à ceux qui sont associés à la planification donnée. Cela peut être appelé une association pour limiter les actes liés à ceux qui sont associés à une planification spécifique.
Exemple: @acts contient les actes de acttype, x, qui sont associés à la planification, y
.@acts = Acttype.find(x).acts.with_planning(y)
Avec ce champ le nom de ce code devrait accomplir ce que vous visiez.
contrôleur:
def show
@planning = Planning.find(params[:id])
@acttypes = Acttype.find(:all, :include => :acts)
end
vue:
<% @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%>