2016-06-16 58 views
0

我有3個模型UserBookList。他們每個人都有彼此的關係。幾乎我想要做的是將一本書添加到用戶列表中。我正在使用best_in_place gem來更新書show.html.erb中用戶列表中的書。當我嘗試更新狀態時,它會回到空白。我不完全確定它爲什麼不更新。也許有人可以檢查我的代碼,看看我是否失去了一些東西。使用has_many:通過關聯和使用best_in_place寶石添加書籍

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 

列表控制器

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 

書籍控制器

class ListsController < ApplicationController 
def show 
    @book = Book.find params[:id] 
    @list = current_user.lists.new 
end 
end 

書籍/ 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

您可能需要仔細閱讀文檔。您可能需要添加書本控制器:respond_with_bip – mrvncaragay

回答

1

有一些語法錯誤: - 無支架後f ind方法在某些情況下 - 您的圖書控制器被稱爲「ListsController」

此外,我會讓書屬於列表,而不是其他方式。這聽起來更合乎邏輯。 另外我不會讓書屬於用戶,如果用戶只通過列表自己的書。

另一件事,在您的書籍控制器。爲什麼當你展示一本書時創建一個新列表?

我無法評論最佳就地寶石。但是,在糾正了幾件事情後,您可能會使其工作

+0

糾正我,如果我錯了。一本書屬於一份清單,一份清單中有許多書籍? – Wesly

+0

這是正確的。那麼你的模型列表應該「have_many books」而不是List「belongs_to」的書籍。但它也可能適用你的方式。這樣更符合邏輯。 – Maxence