0

こんにちは、お気に入り機能を作成していますが、データベースに重複した 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

関連付けの問題だとは思いませんが、とにかくコードを貼り付けたのはそのためかもしれません。

何がうまくいかないのですか?助けていただければ幸いです。ありがとう!

4

1 に答える 1