2016-06-16 9 views
0

Ich habe 3 Modelle UserBook 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' %> 
+0

Sie Dokumentation könnte sorgfältig lesen. Sie müssen möglicherweise in Buch-Controller hinzufügen: respond_with_bip – mrvncaragay

Antwort

1

Es gibt einige Syntaxfehler: - keine Klammern nach die f ind-Methode in einigen Fällen - Ihr Buch-Controller heißt "ListsController"

Darüber hinaus würde ich Buch zur Liste gehören, nicht umgekehrt. Es klingt logischer. Auch würde ich nicht Buch Benutzer gehören, wenn die Benutzer nur Buch über Listen besitzen ..

Eine andere Sache, in Ihrem Buch-Controller. Warum erstellen Sie eine neue Liste, wenn Sie ein Buch anzeigen?

Ich kann nicht auf dem Juwel Best-in-place kommentieren. Aber nach ein paar Dinge zu korrigieren können Sie es arbeiten, haben

+0

Korrigieren Sie mich, wenn ich falsch liege. Ein Buch gehört zu einer Liste und eine Liste hat viele Bücher? – Wesly

+0

Das ist richtig. dann sollte Ihre Modellliste "have_many books" nicht "answer_to" -Bücher auflisten. Aber es kann genauso funktionieren. Das ist nur logisch auf diese Weise. – Maxence