Pregunta

Uso has_many => través de la asociación.

Aquí es lo que tengo.

: modelo de planificación

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

: actos modelo

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

: actcategories modelo

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

: modelo acttype

has_many :acts

Mi problema comienza aquí. Necesito demostrar todo Hechos por cada Ley Tipo Planificaciones que forma parte de la asociación actcategories En este momento estoy recibiendo todos los actos y desaparecidos la asociación actcategories .

Controlador de Planificación

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

Planificación Show View

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

Gracias por cualquier ayuda.

¿Fue útil?

Solución

Creo que la clave que se está perdiendo es que buscadores y alcances mencionados sólo devuelven la clase que se llaman sucesivamente.

@acts = Actcategory.theacts(@planning)

@acts es donde todos los Actcategories actcategories.planning_id = @planning.id. Ellos no necesariamente tienen el tipo de acto necesario.

En realidad, lo que creo que estás buscando es este ámbito con nombre:

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

lo que limita los actos a los asociados con la planificación dada. Esto puede ser llamado en una asociación para limitar los actos vinculados a los asociados con una planificación específica.

Ejemplo: @acts contiene actos de acttype, x, que están asociados con la planificación, y

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

Con este ámbito con nombre este código debe lograr lo que se proponían.

controlador:

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

vista:

<% @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%>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top