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.

Était-ce utile?

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%>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top