所以我有这个书籍数据库和一个洞穴数据库。在洞穴中,有一个book_id字段和user_id字段,这样我就可以看到谁挖掘了哪本书。
现在,我正在尝试创建一个控制器并查看它,但实际上并不顺利。现在视图看起来像这样:
<% provide(:title, "Burrow") %>
<b align="center">Choose the name of the book you want t burrow'</b>
<%= form_for(@book) do |f| %>
<div class="forms">
<%= f.name %>
<%= f.check_box(:book_id) %>
<%= f.submit 'Submit!' %>
</div>
<% end %>
但这让我想到了它产生错误的问题,因为我想将所有书籍放入洞穴控制器中的@books。但我真的没有看到任何其他方式? \
最后的想法是,我会显示所有书籍,然后是一个复选框,这样我就可以选择要挖掘的书籍。之后我还想要一个列出所有用户的下拉菜单,我可以选择为另一个用户挖掘这本书,但默认值是登录用户但是时间到那时。现在我很难理解,为什么我的上市书籍解决方案不起作用?
此处列出我的控制器:
class BurrowsController < ApplicationController
before_action :signed_in_user, only: [:index,:edit,:update, :destroy]
before_action :admin_user, only: :destroy
def index
@burrows = Burrow.all
end
def show
@burrow = Burrow.find(params[:id])
end
def new
@burrow = Burrow.new
end
def create
@burrow = Burrow.new(burrow_params)
if @burrow.save
flash[:success] = "Burrowing a book was successful!"
redirect_to @burrow
else
render 'new'
end
end
def listing
@book_list = Book.all
end
# Private section, makes the page unable to be seen for non logged in users
private
def burrow_params
params.require(:burrow).permit(:user_id, :book_id)
end
def admin_user
redirect_to(root_url) unless current_user.admin?
end
# Redirecting not logged in user etc.
def signed_in_user
unless signed_in?
store_location
redirect_to '/sessions/new', notice: "Please sign in!"
end
end
end
答案 0 :(得分:0)
现在我很难理解,为什么我的上市书籍解决方案不起作用?
我不确定你的意思是什么。您粘贴的视图显然对应于控制器操作Burrows#new
?
所以我要告诉你你的观点有什么问题:
<%= form_for(@book) do |f| %>
这会打印Book
的表单,而不是Burrow
。您可以使用此表单创建一本新书,但这肯定不是您在此尝试做的。
您需要在控制器中包含所有这些变量:
def new
@users = User.all
@books = Book.all
@burrow = Burrow.new
end
因此您可以将collection_select
与@users
一起使用,使用@burrow
对象与form_for
一起使用,并在each
上执行@books
循环例如,像这样:
<%= form_for(@burrow) do |f| %>
<% @books.each do |book| %>
<%= f.check_box :book_ids, multiple: true, book.id, nil %>
<% end %>
<%= f.collection_select :user_id, @users, :id, :name, {}, selected: current_user.id %>
<%= f.submit %>
<% end %>
点击这些命令的文档链接:collection_select,check_box
这不是理想的代码,但它与我的例子非常接近。
我理解你是不是马上得到这个。你的代码现在有点混乱,它有太多错误,需要在一篇文章中解释并只用一行修复。在尝试一次性完成所有操作之前,您可能需要重新开始并执行单一控制器操作。
有时最好坐下来,真正考虑你想要达到的目标,并首先阐述如何在脑海中实现它;然后才开始编程!
在我看来,您正在使用 Michael Hartl 的 RailsTutorial ,所以我现在可以向您推荐的是,阅读您再次阅读的内容在你真正开始自己的应用之前,要更加彻底地尝试坚持他的例子直到你有信心。