试图在一个视图中列出来自多个模型的信息

Posted

技术标签:

【中文标题】试图在一个视图中列出来自多个模型的信息【英文标题】:Trying to list info from multiple models in one view 【发布时间】:2014-01-18 13:34:13 【问题描述】:

所以我有一个用户可以借书的数据库。我们有书籍、用户和借书的人。

代码可以在这里找到:https://gist.github.com/Veske/8490542

我想知道,我怎样才能让我在借阅视图中显示所有书籍,然后还可以为我自己或其他用户选择要借阅的书籍?

如果我尝试在借用控制器中为视图创建一个 book 实例变量,地狱就会松动。所以我现在真的不知道..

编辑:视图中的@book 不再需要,因为它不起作用,我之前在控制器中有一个动作。

这是我的控制器:

class BurrowsController < ApplicationController
  before_action :signed_in_user, only: [:index,:edit,:update, :destroy]
  before_action :admin_user,     only: :destroy

  def index
    @burrow = current_user.burrows.build
    @burrows = Burrow.all
  end

  def show
    @burrow = Burrow.find(params[:id])
  end

  def new
    @burrow = current_user.burrows.build
  end

  def create
    @burrow = current_user.burrows.build(burrow_params)
    if @burrow.save
      flash[:success] = "Burrowing a book was successful!"
      redirect_to @burrow
    else
      render current_user
    end
  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

这是我对创建新借用条目的看法:

<% provide(:title, "Burrow a book") %>

<b align="center">Choose the name of a book you want to burrow and enter 'Submit!'</b>

    <%= form_for(@burrow) do |f| %>
            <div class="forms">
                        <%= f.text_field :book_id, placeholder: "Type in the name of the book...", autofocus: true %>
                        <%= f.submit 'Submit!' %>
                </div>
        <% end %>

目前的观点很糟糕,我现在一直在尝试绝对一切,我只是不明白需要做什么。

借用索引:

<% provide(:title, 'All burrowers') %>

<h2 align="center">All borrowers</h2><
<table align="center">
        <tr>
                <td align="left"><b>Who borrowed</b></td>
                <td align="left"><b>Borrowed what</b></td>
                <% if current_user.admin? && !current_user?(@user) %>
                <td align="left"><b>Admin functions</b></td>
                <% end %>
        </tr>
  <% @burrows.each do |burrow| %>
         <tr>
                <td align="left"><%= link_to burrow.user.name, burrow.user %></td>
                <td align="left"><%= link_to burrow.book.name, burrow.book %></td>   
                <% if current_user.admin? && !current_user?(@user) %>
                <td>
                <%= link_to "Delete this user", burrow, method: :delete, data:  confirm: "You sure?"  %>
                </td>
          <% end %>
         </tr>
 <% end %>
</table>

【问题讨论】:

请不要链接到您的代码。把它放在你的问题中。 编辑了原帖。视图部分对我来说一直在变化,所以只是对结构进行粗略估计。但是,是的.. 它应该有某种方式可以在所有书籍和选择借阅书籍之间进行选择。 “私人部分,使未登录用户无法看到该页面”这根本不是 private 所做的! 【参考方案1】:

一种可能的解决方案是使用select_tag 列表,如下所示:

<%= form_for(@burrow) do |f| %>
  <div class="forms">
    <%= f.select("book_id", Book.all.collect |b| [ b.name, b.id ] ,  include_blank: true ) %>
    <%= f.submit 'Submit!' %>
  </div>
<% end %>

这就是你要找的吗?

顺便说一句 - 我认为您的意思是“借”而不是“洞穴”

【讨论】:

是的!现在试试这个,它会显示页面,我会看看现在是如何收集信息的。你是对的 :D 我在创建应用程序时打错了... 好的,但你能不能告诉我现在如何显示借阅索引中借了什么书?我将在原始帖子中发布我当前的索引。借用的部分有效,但由于某种原因借用的部分无效。 你能上传你的 Burrow 模型吗(可能在要点中,因为它可能与问题没有直接关系)? #<0x00000003b22e30>

以上是关于试图在一个视图中列出来自多个模型的信息的主要内容,如果未能解决你的问题,请参考以下文章

MVC3 在 1 个视图中显示来自多个实体的信息

Mvc 列出嵌套在 Viewmodel 中的多个视图

如何在下一页的表格中列出信息

Xamarin Forms 1 视图绑定到多个对象

如何将多个模型添加到一个视图?

Qt:如何在模型/视图设置中同步对来自多个线程的数据的访问?