多対多関係、特にhas_many:through associationsに関する質問があります。has_many:throughアソシエーションを使用して結合モデルを更新するにはどうすればよいですか?
私が見つけたすべてのチュートリアルでは、モデルとマイグレーションを設定しましたが、コントローラに関しては吊り下げています。
私がしたいのは、すでに存在するアーティクルが再び追加されたときにジョインテーブルのタイムスタンプを更新して、それが "リスト"の先頭に移動するようにすることです。それ、どうやったら出来るの?事前に
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
ありがとう:
これはどのように見えるかのアクションを作成する私です!
更新:
@Benリーあなたの答えのための
おかげで、私は協会を通じてhas_manyのを持っているように私の記事のモデルは次のようになります。
has_many :readinglist_items, :dependent => :destroy
has_many :users, :through => :readinglist_items
だから私はしないでください私がちょうど結合テーブルの特定のエントリにしたいので、:touch => true
をhas_manyに追加できるかどうかを知ってください。
作成アクションの更新のポイントは、ユーザーが過去に追加した記事をユーザーが追加した場合に記事を上に移動することです(もう一度追加するのではなく)。
readinglist_itemsレコードの.touchは、結合表が通常のcreate_table型として設定されているため、主キーであるid列を持つ場合にのみ機能します。 create_join_tableを使用して結合を設定すると、主キーがなくなり、そのレコードに触れることができなくなります。答えは、主キーに追加のマイグレーションを追加することです。 add_column:readinglist_items、:id、:primary_key、first:true – IrishDubGuy