Frage

Ich habe eine Frage bezüglich many-to-many-Beziehungen, insbesondere has_many. Durch Verbände

Alle Tutorials fand ich einfach eingerichtet mit den Modellen und Migrationen aber lassen Sie hängen, wenn es um Controller kommt.

Was ich tun möchte, ist den Zeitstempel aktualisieren der Tabelle beitreten, wenn ein Artikel, der bereits vorhanden ist, wieder hinzugefügt wird, so dass es an die Spitze der „Liste“ bewegt. Wie kann ich das tun?

Dies ist, was Aktion erstellen mein Aussehen wie:

def create
  @article = Article.find_or_create_by_url(params[:article])
  if current_user.articles.find(@article)

      # update the timestamps on the join table 
      # ie moved the old article to the top

      flash[:notice] = "Successfully added article (again)."
      redirect_to @article
  else
    @article.users << current_user
    if @article.save
      flash[:notice] = "Successfully added article."
      redirect_to @article
    else
      render :action => 'new'
    end
  end
end

Vielen Dank im Voraus!

Update:

@ Ben Lee

Vielen Dank für Ihre Antwort, wie ich habe eine has_many durch Assoziation meinen Artikel Modell sieht wie folgt aus:

has_many :readinglist_items, :dependent => :destroy
has_many :users, :through => :readinglist_items

Also ich weiß nicht, ob ich einen :touch => true zu has_many hinzufügen kann, wie ich mag nur bestimmten Eintrag in dem Join-Tabelle.

Der Punkt des Updates in der Aktion zu erstellen ist, den Artikel nach oben zu bewegen (anstatt es erneut hinzufügen), wenn ein Benutzer einen Artikel fügt es bereits in der Vergangenheit hinzugefügt hat.

War es hilfreich?

Lösung 2

ich es gelöst! (Readinglist_item ist der Name der Join-Tabelle):

def create
  @article = Article.find_or_create_by_url(params[:article])
  if current_user.articles.find(@article)

      @article.readinglist_items.find_by_user_id(current_user.id).touch

      flash[:notice] = "Successfully added article (again)."
      redirect_to @article
  else
    @article.users << current_user
    if @article.save
      flash[:notice] = "Successfully added article."
      redirect_to @article
    else
      render :action => 'new'
    end
  end
end

Andere Tipps

Wenn ich Sie richtig verstehe, dann ist dies kein Controller Problem, sondern ein Modell Problem. Sie können :touch => true auf einer belongs_to Beziehung angeben. Dadurch wird es so, dass, wenn das Kind aktualisiert wird, wird der Verein update_at aktualisiert gut.

So setzte so etwas wie dies in Ihrem Article Modell:

belongs_to :whatever, :touch => true

Auch tangential bezogen werden: es ist nicht klar, aus dem Code genau das, was Ihr Code tut, aber es scheint, wie vielleicht haben Sie create und update Funktionalität setzen sowohl im create Methode sie statt Aufspaltung in geeigneter Weise

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