Frage

Ich habe ein Modell, Futtermittel, die zu vielen GefilterteBenutzer und gehört hat. In diesem Fall habe ich es durch einen has_many umgesetzt. Durch Beziehung

class Feed < ActiveRecord::Base
  has_many :denials, :dependent => :destroy
  has_many :filtered_users, :through => :denials

würde Ich mag einen Datensatz erstellen, wenn es nicht oder das Objekt finden existiert, wenn es vorhanden ist. Wenn ich versuche, und die find_or_initialize_by (oder find_or_create_by) eine Ausnahme undefined method 'feed_id=' for <FilteredUser.. geworfen sagt

Hier ist der Code:

feed = Feed.find(params[:id])
user = feed.filtered_users.find_or_initialize_by_user_url(params[:user_url])
if params[:status] == "block"
  feed.filtered_users << user
else
  feed.filtered_users.delete(user)
end
feed.save

Alle Vorschläge, wie dies zu beheben oder, wie um ihn zu arbeiten trocken?

Danke!

War es hilfreich?

Lösung

Erstens, weil es eine has_many :through Beziehung ist, hat die Initialisierung keine Möglichkeit zu wissen, welche die neuen denial filtered_user sollte in Verbindung gebracht werden. Wenn Sie verwenden find_or_initialize_by wollen, müssen Sie es auf einem bestimmten denial auszuführen, die mit dem feed verbunden ist.

Erstellen Sie eine neue filtered_user und verbinden sie mit einer bestimmten Ablehnung.

Zweitens, die Vereinbarung mit ErsatzRyan, die allgemeine Logik scheint ein wenig ab.

Andere Tipps

Wäre es nicht einfacher, die params zu überprüfen [: status]? Und dann tun, was Sie tun müssen,

feed = Feed.find(params[:id])
if params[:status] == 'block'
   feed.filtered_users.build(:user_url => params[:user_url])
else
   feed.filtered_users.find_by_user_url(params[:user_url]).delete
end
feed.save

Diese Warnung wird Luft codiert nicht getestet

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top