我不知道我应该从哪里开始,我想做。
我有一个“欢迎页面”,登录的用户会看到一张票据清单给他。
在导航中,他可以导航到“普通”故障单列表视图,在该视图中,他获取故障单列表,如果他在单独的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
你能帮我找到解决方案吗?
编辑:
对不起,我想你误解了我想告诉你的事 - 也许是因为我描述错了。我有以下观点(见截图):
欢迎页面:
门票“索引”
如果用户使用导航并单击票证,则会将其定向到票证索引页面,其中列出了所有票证(通常用于rails应用程序)。当他现在点击票证时,票证“显示”数据将通过jQuery(我上面发布的代码)在右侧的div中呈现为部分。
我现在想要的是,如果用户在欢迎页面上并点击了故障单,他应该被定向到故障单索引页面(tickets_path) - &gt;工作,他在欢迎页面上选择的门票应该在div中呈现为部分,就像他导航到门票并在那里选择门票一样。
这就是我在挣扎的地步。
此致 马库斯
答案 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
顺便说一句,您的行动很奇怪,如果您希望显示所有门票,则index
,show
用于显示a ticket
。你可以重构它!
答案 1 :(得分:1)
<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部分。看看你是否可以完成上述工作并检查控制台中返回的数据,以便了解数据的传递方式