Rails 4 和 JQuery - 导航后加载特定数据

Rails 4 and JQuery - load specific data after navigating

我不知道应该从哪里开始我想做的以下事情。

我有一个 "Welcome Page",登录用户会在其中显示分配给他的工单列表。

在导航中,他可以导航到 "normal" 工单列表视图,在那里他获得工单列表,如果他在单独的 div 容器中选择一个工单,则会显示该单张工单的 _show 视图已加载此代码:

show.js.erb:

$("#current_ticket").html("<%= escape_javascript(render partial: 'tickets/show', locals: { ticket: @ticket } ) %>");

现在我想要的是,如果用户在他的欢迎页面上单击票证,他将被导航到 tickets_path(有效:

<td><%= link_to ticket.name, tickets_path %></td>

) 然后他点击的票被加载到这个 tickets_path 页面上的 div 容器中。

编辑:

这是门票控制器的展示部分

def show
  @tickets = Ticket.all
  respond_to do |format|
    format.js {render layout: false}
  end
end

你能帮我找到解决办法吗?

编辑:

抱歉,我认为您误解了我想告诉您的内容 - 可能是因为我的描述有误。我有以下看法(见截图):

欢迎页面:

门票"index"

如果用户使用导航并单击票证,他将被定向到列出所有票证的票证索引页面(通常用于 rails 应用程序)。当他现在点击一张票时,票 "show" 数据通过 jQuery(我在上面发布的代码)在右侧的 div 中呈现为部分数据。

我现在想要的是,如果用户在欢迎页面上单击票,他应该被定向到票索引页面 (tickets_path) -> 有效,并且他的票在他的欢迎页面上选择的应该在 div 中呈现为部分,就像他导航到门票并在那里选择门票时一样。

这就是我挣扎的地方。

问候 马库斯

让它发挥作用:

  • 您的 link_to 必须定义 remote 属性:

    <%= link_to ticket.name, tickets_path, 远程: true %>

  • 你的show.js.erb用了@ticket但是你还没有定义,我觉得是打错了,你可以用@tickets代替

    $("#current_ticket").html("<%= escape_javascript(render partial: 'tickets/show', locals: { tickets: @tickets } ) %>");
    
  • 您也可以将 tickets/show 更改为使用 tickets

顺便说一句,你的动作很奇怪,如果你的期望是显示所有票,那么动作将是 indexshow 显示 a ticket。你可以重构它!

您似乎混淆了索引和显示方法。 index 方法用于获取所有门票; show方法是为了获得一张票。

需要在link_to语句中将工单传递给工单路径。在控制器的显示方法中,将票证设置为 linked。

控制器

def index
  @tickets = Ticket.all
  respond_to do |format|
    format.js {render layout: false}
  end
end

def show
  @ticket = Ticket.find(params[:id])
  respond_to do |format|
    format.js {render @ticket}
  end
end

在您的导航中,您应该遍历所有票证,并且可以向每张票证添加 link。您需要将 remote: true 添加到 link 以便 rails 知道发出 ajax 请求。

<% @tickets.each do |ticket| %>
  <%= link_to ticket.name, ticket_path(ticket), remote: true %>
<% end %>

有几种方法可以将 individual 票证添加到视图中。您可以使用 js 函数将其附加到 div 或者您可以创建 js.erb 部分。看看您是否可以使上述工作正常并检查控制台中返回的数据,以便您了解数据是如何传递的

我自己解决了。 在我的欢迎视图中,我用我要呈现的票证的 ID 调用 tickes_path

<td><%= link_to ticket.name, tickets_path(id: ticket.id) %></td>

在工单控制器索引中,我找到了这张工单并将其保存在一个变量中

  def index
unless params[:id].nil?
  id = params[:id]
  @ticket = Ticket.find(id)
end

结束

并且在门票索引视图中,我使用变量

中的门票渲染演出部分
<div id="current_ticket">
  <% unless params[:id].nil? %>
      <%= render partial: 'tickets/show', locals: { ticket: @ticket } %>
  <% end %>
</div>

是啊!