使用has_many:通过关联并使用best_in_place gem将书添加到列表中

时间:2016-06-16 20:36:49

标签: ruby-on-rails ruby best-in-place

我有3个模型User BookList。他们每个人都有彼此的关系。几乎我想要做的就是在用户列表中添加一本书。我正在使用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' %>

1 个答案:

答案 0 :(得分:1)

有一些语法错误: - 在某些情况下,在find方法之后没有括号 - 您的图书管理员名为“ListsController”

而且我会让Book属于List,而不是相反。这听起来更合乎逻辑。 如果用户只通过列表拥有书籍,我也不会让Book属于User。

另一件事,在您的Book控制器中。为什么在出示书籍时会创建新列表?

我无法评论最佳宝石。但在纠正了一些事情之后,你可能会让它发挥作用