使用数据库时遇到问题

时间:2014-01-18 12:24:52

标签: ruby-on-rails

所以我有这个书籍数据库和一个洞穴数据库。在洞穴中,有一个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

1 个答案:

答案 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_selectcheck_box

这不是理想的代码,但它与我的例子非常接近。


我理解你是不是马上得到这个。你的代码现在有点混乱,它有太多错误,需要在一篇文章中解释并只用一行修复。在尝试一次性完成所有操作之前,您可能需要重新开始并执行单一控制器操作

有时最好坐下来,真正考虑你想要达到的目标,并首先阐述如何在脑海中实现它;然后才开始编程!

在我看来,您正在使用 Michael Hartl RailsTutorial ,所以我现在可以向您推荐的是,阅读您再次阅读的内容在你真正开始自己的应用之前,要更加彻底地尝试坚持他的例子直到你有信心。