Ich habe 3 Modelle User
Book
und List
. Sie haben jeweils eine Beziehung zueinander. So ziemlich alles, was ich versuche, ein Buch zu einer Benutzerliste hinzuzufügen. Ich verwende den Edelstein "best_in_place", um das Buch aus der Benutzerliste in den Büchern "show.html.erb" zu aktualisieren. Wenn ich versuche, den Status zu aktualisieren, geht es einfach leer zurück. Ich bin mir nicht ganz sicher, warum es nicht aktualisiert wird. Vielleicht kann jemand meinen Code auschecken und sehen, ob mir etwas fehlt.Hinzufügen eines Buches zu einer Liste mit einer has_many: through-Zuordnung und der Verwendung des best_in_place-Gems
class List < ActiveRecord::Base
belongs_to :user
belongs_to :book
validates :book, uniqueness: { scope: :user_id, message: "%{attribute} already added" }
end
class Book < ActiveRecord::Base
has_many :lists
end
class User < ActiveRecord::Base
has_many :lists
has_many :books, through: :lists
end
Listen-Controller
class ListsController < ApplicationController
respond_to :html, :json
def create
@book = Book.find params[:book_id]
@list = current_user.lists.new list_params
@list.save
end
def update
@book = Book.find params[:book_id]
@list = current_user.lists.find(params[:id])
@list.update (list_params)
respond_with @list
end
def destroy
@book = Book.find params[:book_id]
@list = current_user.lists.find(params[:id]).destroy
end
private
def list_params
params.require(:list).permit(:status, :rating).merge(book_id: @book.id)
end
end
Bücher Controller
class ListsController < ApplicationController
def show
@book = Book.find params[:id]
@list = current_user.lists.new
end
end
Bücher/show.html.erb
<%= best_in_place [@book, @list], :status, type: :select,
collection: [["Watching" , "Watching"],
["Completed" , "Completed"],
["On-Hold" , "On-Hold"],
["Dropped" , "Dropped"],
["Plan to Read" , "Plan to REad"]],
class: 'small dropdown button' %>
Sie Dokumentation könnte sorgfältig lesen. Sie müssen möglicherweise in Buch-Controller hinzufügen: respond_with_bip – mrvncaragay