我有一个书评/讨论网站,并希望在他们的个人资料页面上订阅所有用户的书籍,因为他们目前正在阅读该书。我在书模型中添加了一个名为current的列,当用户添加一本书时,他们可以选中一个“我正在读这个”的方框。如果用户单击该框,则book对象具有:current属性,其值为“1”。如果他们没有单击该框,则值为:current为“0”。
在我看来,我有这段代码告诉用户他们目前正在阅读哪些书籍,并且工作正常。
<% if book.current == "1" %>
<h4>I am currently reading this book</h4>
<% end %>
然而,在我的show用户控制器中,我无法通过以下方式对其进行排序:当前状态。
这是我尝试过的:
def show
@user = User.find_by_id(params[:id])
@books= Book.all.sort { |p1, p2| p1.current <=> p2.current }
end
和
def show
@user = User.find_by_id(params[:id])
@books = Book.all
@books = @books.order(:current)
end
和
def show
@user = User.find_by_id(params[:id])
@books = Book.all
@books = @books.order(current: :desc)
end
并且,只是为了确保它以正确的方式
def show
@user = User.find_by_id(params[:id])
@books = Book.all
@books = @books.order(current: :asc)
end
没有工作。并且,没有抛出错误,他们只是不对它进行排序。最新而不是第一本的“当前”书。这是显示和循环用户书籍的代码。此代码也可以正常工作。
<% @user.books.each do |book| %>
<% if params[:id].to_s == book.user_id.to_s %>
<ul class="profileDisplay" >
<img alt="Book Jacket" class="homepageImages" src=<%= book.image %> >
<% if book.current == "1" %>
<h4>I am currently reading this book</h4>
<% end %>
<p><b>Contributor: </b><%= book.user.name %></p>
<p><b>Title: </b><%= book.title %></p>
<p><b>Author: </b><%= book.author %></p>
<p><b>Genre: </b><%= book.genre %></p>
<p><b>Publication Date: </b><%= book.publication_date %></p>
<p><b>Publisher: </b><%= book.publisher %></p>
<p><b>Synopsis: </b><%= book.synopsis %></p>
<% if params[:id] == session[:user_id].to_s || params[:action] == "profile" %>
<%= button_to "Edit Book", book_edit_path(book.id), method: "get", class: "btn btn-primary col-xs-2" %>
<%= button_to "Delete Book", delete_book_path(book.id), method: :delete, data: {confirm: "Are you sure you want to delete this book and all it's reviews?"}, class: "btn btn-danger col-xs-2" %>
<% end %>
</ul>
<% end %>
<% end %>
答案 0 :(得分:2)
在视图中,@user.books
尚未排序。
您对它们进行了排序并将其分配到@books
我认为应该是这样的
<强> CONTROLLER 强>
def show
@user = User.find_by_id(params[:id])
@books = @user.books.order(current: :desc)
end
查看强>
<% @books.each do |book| %>
<!-- show book records here -->
<% end %>
答案 1 :(得分:0)
在图书模型中添加默认范围
default_scope { order(:current=> :desc) }
和您的控制器
@user = User.find_by_id(params[:id])
和观看次数
<% @user.books.each do |book| %>
#do whatever
<% end %>