在1个视图中处理2个模型

时间:2015-07-20 22:55:27

标签: ruby-on-rails ruby ruby-on-rails-4

我有两个模型,我试图在1个视图中进行交互。第一个模型是Room,第二个模型是Availability。 1间客房拥有许多可用性。

在1个房间页面上,我通过以下部分渲染可用性:

<% @room.availabilities.where("booking_id is NULL").order("start_time").each_with_index do |a|%>

除了每个可用性,我还有一个删除和更新的按钮。删除工作很好,因为它在我的循环中所以我可以做这样的事情。

<%= link_to("Delete", availability_path(a.id), method: :delete,  remote: true) %>

但我在编辑方面遇到了麻烦。我试图通过一个无法访问&#39; a&#39;来自循环的变量。因此,我不确定如何将唯一可用性传递给表单

按钮:

<!-- Edit button -->
<button type="button" class="btn btn-xs btn-primary" data-toggle="modal" data-target="#editAvailability"><i class='fa fa-pencil'></i></button>

<!-- Edit Availability Form -->
<%= simple_form_for @facility.availabilities.find(???), method: :put, remote: true do |f| %>

2 个答案:

答案 0 :(得分:1)

您应该可以使用AJAX执行此操作。我有一个具有模态下拉菜单的应用程序,可让我通过下拉列表中的按钮切换设备中的设备。您可以使用指向可在模态中呈现表单的“可用性”控制器的路径。我很简单,因为它只是翻转,但我不明白为什么你不能使用表格。我会将您的查询从您的视图中移出并创建一个帮助程序,在变量中提供查询结果。

我可以提供更多详细信息,但需要查看更多当前代码。如果您可以发布控制器和模态的所有视图代码。我不明白为什么你无法访问模态中需要的变量?如果模态具有AJAX调用,则应该能够使用控制器可用的任何数据填充它。

修改

看看这个:https://coderwall.com/p/ej0mhg/open-a-rails-form-with-twitter-bootstrap-modals。请务必阅读本文末尾的链接,它中有一些StackOverflow示例。我在想link_to是要走的路:

html

这应该打开一个模态并向response.context['files']控制器询问JS响应。确保你有一个编辑动作,我在你的控制器中没有看到一个:

self.assertContains(response, 'pagination', html=True)

因此,JS调用将使其在/ views / availabilitys /文件夹中查找名为edit.js.erb的文件,内容如下:

<%= link_to 'Update, availabilities_edit_path(a.id), {:remote => true, 'data-controls-modal' =>  "modal-window", 'data-backdrop' => true, 'data-keyboard' => true} %>

在您的编辑表单中,您现在可以在表单中使用availabilities#edit实例变量:

availabilities.rb

  def edit
    @availability = Availability.find_by(id: params[:id])
    respond_to do |format|
    format.html
    format.js
  end

因此,您的模态使用AJAX查找构建,该查找返回使用所需实例变量构建的表单。我把这些东西放在我写的东西以及我读过的其他内容中,所以可能会有一些错误和调整以使代码正常工作。让我知道这会让你有多远。

答案 1 :(得分:0)

您可以在循环中存储更新按钮中所需的所有信息,如下所示:

<%= link_to("Update", method: :put, remote: true, data: { attr1: a.attr1, attr2: a.attr2 }) %>

然后每个按钮都知道他们正在操作的实体。