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
顺便说一句,你的动作很奇怪,如果你的期望是显示所有票,那么动作将是 index
,show
显示 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>
是啊!
我不知道应该从哪里开始我想做的以下事情。
我有一个 "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
顺便说一句,你的动作很奇怪,如果你的期望是显示所有票,那么动作将是 index
,show
显示 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>
是啊!