こんにちは、お気に入り機能を作成していますが、データベースに重複した ID を作成しています。IDは正しく保存されますが、エントリが複製されます。
私の好きな形で...
<div id="favorite_form">
<% if current_user.favorited?(@lesson) %>
<%= render 'unfavorite' %>
<% else %>
<%= render 'favorite' %>
<% end %>
</div>
私のお気に入りのパーシャルは...
<%= puts "xx favorite partial"%>
<%= form_for(current_user.favorite_relationships.build(lesson_id: @lesson.id), remote: true) do |f| %>
<div><%= f.hidden_field :lesson_id %></div>
<%= f.submit "Favorite", class: "btn btn-large btn-primary" %>
<% end %>
ユーザーがお気に入りボタンをクリックすると、これは私の FavoriteRelationships#create を呼び出す必要があります
def create
puts "xx create"
puts params[:favorite_relationship][:lesson_id]
@lesson = Lesson.find(params[:favorite_relationship][:lesson_id])
current_user.favorite!(@lesson)
respond_to do |format|
format.html { redirect_to @lesson }
format.js
end
end
上記のコードでは、ユーザー モデル関数をお気に入りと呼んでいます。次のように見えます...
def favorite!(lesson)
puts 'xx favorite'
favorite_relationships.create!(lesson_id: lesson.id)
end
私はprintステートメントを入れましたが、何らかの理由で...「xx create」が2回呼び出され、「xx favorite」も2回呼び出されます。'xx favorite partial' は 1 回しか表示されないため、パーシャルは 1 回レンダリングされます。ただし、FavoritesRelationships#create が 2 回呼び出されています
何が起こっている?
私のレッスンモデルでは、ユーザーが私が持っているお気に入りにしようとしている..
belongs_to :user
has_many :favorite_relationships
has_many :users, :through => :favorite_relationships
そして私のユーザーモデルには
has_many :lessons
has_many :favorite_relationships
お気に入り機能は Web アプリの一部にすぎません。そのため、複数の関連付けがあります。
最後になりましたが、私のお気に入りの関係.rb
belongs_to :user
belongs_to :lesson
関連付けの問題だとは思いませんが、とにかくコードを貼り付けたのはそのためかもしれません。
何がうまくいかないのですか?助けていただければ幸いです。ありがとう!