2

Also arbeite ich an einem Projekt, wo es Aufgaben gibt, die eine Schnitzeljagd ausmachen. Wenn also ein Nutzer auf eine bestimmte Jagd klickt, möchte ich, dass die Datei show.html.erb die Jagd sowie die mit dieser Jagd verbundenen Aufgaben anzeigt. Beide Modelle (Hunt.rb und Task.rb) haben "has_and_belongs_to_many" Beziehungen miteinander. Mein Controller hatte ursprünglich diesen Code, aber er zeigte alle Aufgaben in der Datenbank und nicht nur die Aufgaben, die mit einer bestimmten Jagd verbunden waren.Hat und gehört zu Viele Fehler - * _development.hunts_tasks 'existiert nicht:

def show 
    @hunt = Hunt.find(params[:id]) 
    @title = @hunt.name 
    @tasks = Task.paginate(:page => params[:page]) 
    end 

Also habe ich das versucht.

def show 
    @hunt = Hunt.find(params[:id]) 
    @title = @hunt.name  
    @tasks = @hunt.tasks.paginate(:page => params[:page]) 
    end 

Aber dann wirft es diesen Fehler auf:

ActiveRecord::StatementInvalid in Hunts#show 
    Showing /****/views/hunts/show.html.erb where line #10 raised: 
    Mysql2::Error: Table '***_development.hunts_tasks' doesn't exist: SELECT `tasks`.* FROM `tasks` INNER JOIN `hunts_tasks` ON `tasks`.`id` = `hunts_tasks`.`task_id` WHERE `hunts_tasks`.`hunt_id` = 100 LIMIT 30 OFFSET 0 

Hier ist der show.html.erb:

<h1>Show Hunt</h1> 

    <table> 
     <tr> 
     <td class="main"> 
      <h1> 
      <%= @hunt.name %> 
      </h1> 
      <ul>   
       <% @tasks.each do |task| %> 
       <%= render task %> 
       <% end %> 
      </ul> 
     </td> 
     </tr> 
    </table> 

Irgendwelche Ideen, was ich vermasselt?

+2

Haben Sie die Join-Tabelle 'hunts_tasks' erstellt. –

+1

Hast du die 'hunts_tasks' Tabelle erstellt? Ich glaube, 'has_and_belongs_to_many' erfordert, dass Sie immer noch eine Tabelle erstellen, um die Beziehung darzustellen. In diesem Fall ist es nur eine einfache Tabelle mit 'hunt_id' und' task_id'. Siehe [Dokumentation] (http://api.rubyonrails.org/classes/ActiveRecord/Associations/ClassMethods.html#method-i-has_and_belongs_to_many) –

Antwort

2

Ich schlage vor, Sie betrachten aus has_and_belongs_to_many zu has_many :through => tbl

class Hunt < ActiveRecord::Base 
    has_many :hunttasks 
    has_many :tasks :through => :hunttasks 
end 

class HuntTask < ActiveRecord::Base 

    belongs_to :hunt 
    belongs_to :task 

class Task < ActiveRecord::Base 
    has_many :hunttasks 
    has_many :hunts :through => :hunttasks 
end 

Schalten Sie finden es flexibler und einfacher auf lange Sicht zu verwenden, so dass es zu einem besseren Ort ist zu starten.

Normalerweise zeige ich nicht auf API, wenn Leute Fragen haben, aber in diesem Fall hat the api tatsächlich gute Informationen und Beispiele.

+0

Ich werde es versuchen. Vielen Dank! –

+1

Sicher auch siehe api link, den ich oben hinzugefügt habe - die api ist dort ziemlich gut lesbar (im Gegensatz zu vielen apis!) –

+0

Du hast recht, das ist das klarste api, das ich gesehen habe. Große Ressource. Vielen Dank! –

Verwandte Themen