2016-09-30 2 views
0

Ich habe ein Vermieter-Modell und in der Tabelle gibt es ein Feld für listing_agent_id. Es gibt auch ein Agentenmodell, in dem alle Informationen gespeichert sind. In der Indexansicht versuche ich uns <%= landlord.listing_agent.name aber immer wieder einen Fehler zu bekommen. Ich habe Agenten in meinem Vermieter-Controller definiert, aber es scheint immer noch nicht zu funktionieren. Jede Hilfe wäre willkommen.NoMethodError - Undefinierte Methode - Ziehen eines Namens aus einer ID in Rails 4

Vermieter Index:

<tbody> 
    <% @landlords.each do |landlord| %> 
    <tr> 
     <td><%= landlord.listing_agent.name %></td> 
    </tr> 
    <% end %> 
</tbody> 

Vermieter Controller:

def index 
    @landlords = Landlord.all 
end 

def new 
    @landlord = Landlord.new 
    @agents = Agent.employees.order(first_name: :asc) 
end 

Vermieter Modell:

class Landlord < ActiveRecord::Base 
    has_many :landlord_addresses 
end 

Fehler:

enter image description here

Antwort

2

ActiveRecord erstellt "automatisch" keine Verknüpfung, nur weil Sie eine Spalte *_id haben. Es gibt nur zwei viele Möglichkeiten, um aus der Ferne nützlich zu sein.

Zur Einrichtung eine Assoziation zwischen Landlord und Agent Sie tun würde:

class Landlord < ActiveRecord::Base 
    belongs_to :listing_agent, class_name: 'Agent' 
          inverse_of: :landlord 
    # use inverse_of: :landlords if the relation is one to many. 
end 

class Agent < ActiveRecord::Base 
    has_one :landlord, inverse_of: :listing_agent 
    # or 
    has_many :landlords, inverse_of: :listing_agent 
end 

Die class_name: 'Agent' Option ist erforderlich, da Active kann nicht die Klasse aus dem Namen des Vereins ableiten. inverse_of hilft, Inkonsistenzen zu vermeiden, indem ein einzelnes Objekt im Speicher gehalten wird.

Verwandte Themen