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

时间:2016-04-20 14:52:08

标签: jquery html ruby-on-rails navigation

我不知道我应该从哪里开始,我想做。

我有一个“欢迎页面”,登录的用户会看到一张票据清单给他。

在导航中,他可以导航到“普通”故障单列表视图,在该视图中,他获取故障单列表,如果他在单独的div容器中选择一个,则使用此代码加载此单个故障单的_show视图:

show.js.erb:

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

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

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

)并且他点击的故障单将被加载到此ticket_path页面上的div容器中。

编辑:

这是故障单控制器的显示部分

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

你能帮我找到解决方案吗?

编辑:

对不起,我想你误解了我想告诉你的事 - 也许是因为我描述错了。我有以下观点(见截图):

欢迎页面:

Welcome Page

门票“索引”

Tickets index

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

我现在想要的是,如果用户在欢迎页面上并点击了故障单,他应该被定向到故障单索引页面(tickets_path) - &gt;工作,他在欢迎页面上选择的门票应该在div中呈现为部分,就像他导航到门票并在那里选择门票一样。

这就是我在挣扎的地步。

此致 马库斯

3 个答案:

答案 0 :(得分:1)

使其有效:

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

    &lt;%= link_to ticket.name,tickets_path,remote:true%&gt;

  • 您的show.js.erb已使用@ticket,但尚未对其进行定义,我认为这是错误的拼写错误,您可以使用@tickets代替

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

顺便说一句,您的行动很奇怪,如果您希望显示所有门票,则indexshow用于显示a ticket。你可以重构它!

答案 1 :(得分:1)

我自己解决了。 在我的欢迎视图中,我将tickes_path称为我想要呈现的票证的ID

<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

在故障单索引视图中,我使用变量

中的该故障单渲染show partial
<div id="current_ticket">
  <% unless params[:id].nil? %>
      <%= render partial: 'tickets/show', locals: { ticket: @ticket } %>
  <% end %>
</div>

Yeahy!

答案 2 :(得分:0)

您似乎在混淆索引并显示方法。索引方法用于获取所有票证; show方法是获得一张票。

您需要将票证传递给link_to语句中的票证路径。在控制器的show方法中将票证设置为链接的票证。

控制器

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

在导航中,您应该循环浏览所有故障单,并且可以添加每个故障单的链接。您需要将remote:true添加到链接,以便rails知道发出ajax请求。

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

有几种方法可以将单个故障单添加到视图中。您可以使用js函数将其附加到div或者您可以创建js.erb部分。看看你是否可以完成上述工作并检查控制台中返回的数据,以便了解数据的传递方式