我是红宝石的初学者。我在一个视图中有一个表,当我点击该行/项时,它应该选择所选行的ID并移动到将被触发的另一个视图,我是3天搜索并且我无法实现。
视图应该采用ID或其他参数,以便在另一个我可以处理选择带来更详细的信息>>:
<td>
<%= link_to pedido.id, detalhes_backoffice_pedidos_path(:pedido_id =>
pedido.id) , :onclick=>"window.open(this.href,'create_company',
'height=600,
width=600');return false;" %>
</td>
单击请求ID时调用的视图(&#34;弹出窗口&#34;)。 Obs.:Tries以无数种方式,现在她就像这样...&gt;&gt;&gt;&gt;
<div class='container-fluid'>
<div style='display: block;' class="col-xs-6 esquerdo ">
<label>Num.pedido<%= pedido.id %></label> <br>
<label>nome</label> <br>
<label>telefone</label> <br>
</div>
控制器与GT;&GT;
class Backoffice::PedidosController < BackofficeController
.....
def detalhes
render :layout => "application"
@pedido = params[:pedido_id]
end
在尝试了这么多之后,我完全迷失了....如果你能通过一些示例链接进行学习,那将是非常有用的!
答案 0 :(得分:0)
我可能误解了这个问题,但在我看来,您只需要链接到表格中每个detalhes
的{{1}}操作。
这是表格:
pedido
在路线中你会有这样的东西:
<table>
<tbody>
<% @pedidos.each do |pedido| %>
<tr>
<td><%= link_to 'Detalhes this Pedido!' detalhes_path(pedido) %></td>
<td>More table data related to this pedido</td>
</tr>
<% end %>
</tbody>
</table>
答案 1 :(得分:0)
很明显,您只需要使用AJAX在页面上显示所选的pedido详细信息。 Rails有一个简单的方法来做到这一点。
首先放入一张下面有div的表格,用于显示pedido信息。表中的每一行都有一个指向执行AJAX的控制器操作的链接。使用remote: true
建立链接AJAX,这样用户就不会被带到另一个页面。
<table>
<tbody>
<% @pedidos.each do |pedido| %>
<tr>
<td><%= link_to 'More info on this Pedido!' fetch_info_pedidos_path(pedido), remote: true %></td>
</tr>
<% end %>
</tbody>
</table>
<div id="pedido-info"></div>
在pedido控制器中制作动作路线。这是routes.rb
resources :pedidos do
get :fetch_info, on: :member
end
这应创建一个名为/pedidos/:id/fetch_info
的路径fetch_info_pedidos
表中的链接将沿此路径发出js格式请求,因此控制器操作必须准备好处理该操作。 pedido id将作为名为:id
def fetch_info
@pedido = Pedido.find params[:id]
respond_to :js
end
由于它响应js格式请求,它将使用js内容而不是html进行响应 - 这意味着我们需要将js文件作为视图,但在我们制作之前,让我们做一个部分用于显示pedido信息。可以使用render
方法将其放入任何视图中。它将在app/views/pedidos/_pedido.html.erb
中(您必须在文件名的开头使用下划线来表示它是部分的)您可以在此处放置任何内容,使用pedido
变量来引用对于pedido。这是一个例子:
<h2>Pedido!</2>
<p>number: <%= pedido.id %></p>
<p>nom: <%= pedido.nom %></p>
<p>telefone: <%= pedido.fone%></p>
最后让我们将js传递回浏览器。这将是一个像其他视图一样的erb文件。它只会将_pedido部分作为内容放到表格下的div中。 app/views/pedidos/fetch_data.js.erb
$('#pedido-info').html("<%= j render @pedido %>");
这就是你所需要的一切。这里j
转义render
方法的输出,以便它在javascript字符串中很好地播放。
在这里发生了一些Rails魔法,我将解释,因为,正如你在任何巫师训练学校学到的那样:&#34;不要使用任何魔法你不要完全理解&#34;
render
方法需要渲染部分的名称,并且可选地要传递一些局部变量。如果它只给出一个ActiveRecord对象,它将查找与对象的类名匹配的部分(Pedido
转到_pedido.html.erb
)并且它也将对象作为局部变量传递匹配名称。因此render @pedido
会转换为render partial: 'pedido', locals: {pedido: @pedido}
我还没有尝试过这个答案中的任何代码,我只是把它写在了我的头顶,所以你可能需要稍微摇晃它才能让它发挥作用。
如果您只是使用Google搜索如何执行此操作,那么您可能会遇到a link to a page {{3}}。它基本上和我在这里所说的一样,除了他的AJAX带来了一整套对象,而不是一次只有一个。