我有3个模型User
Book
和List
。他们每个人都有彼此的关系。几乎我想要做的就是在用户列表中添加一本书。我正在使用best_in_place gem来更新书籍show.html.erb中的用户列表。当我尝试更新状态时,它会回到空白状态。我不完全确定它为什么不更新。也许有人可以查看我的代码,看看我是否遗漏了什么。
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 :(得分:1)
有一些语法错误: - 在某些情况下,在find方法之后没有括号 - 您的图书管理员名为“ListsController”
而且我会让Book属于List,而不是相反。这听起来更合乎逻辑。 如果用户只通过列表拥有书籍,我也不会让Book属于User。
另一件事,在您的Book控制器中。为什么在出示书籍时会创建新列表?
我无法评论最佳宝石。但在纠正了一些事情之后,你可能会让它发挥作用