link 从 table 行到新视图生成 :format => 单击行的 ID 为什么? Rails
link from table row to new view generating :format => id of clicked row Why? Rails
我按照 SO # 9945620 的示例,Making a table row into a link in Rails 发送到控制器的参数是 {"controller"=>"cpe_events", "action"=>"cpe_course_description_live", "format"=>"15"}
我假设 format
是由 [=56= 自动生成的].但是,我不明白为什么它采用行/记录的 id
以及为什么 cpe_events params
或 id
没有被传递。
编辑:我应该注意到 table 是使用 Bootstrap、class="span12 table table-hover table-striped table-bordered"
呈现的,因为它也是用 jQuery.
编写的
完整代码在注释下方。
这是引发错误的数据-link:
<tr data-link="<%= cpe_course_description_live_path(cpe_event) %>" >
参考示例中使用了该格式。我控制台网络部分的 link 显示为 cpe_course_description_live_path.15
但是,控制器 @cpe_event = CpeEvent.find(params[:id])
无法读取 id
如果我把它改成:
<tr data-link="<%= cpe_course_description_live_path(cpe_event, :format => 'html') %>" >
它正确发送格式。参数现在是 {"controller"=>"cpe_events", "action"=>"cpe_course_description_live", "format"=>"html"}
,控制台的网络部分显示为 cpe_course_description_live_path.html
底线:没有将参数或 ID 传递给控制器。
这是视图/table代码:
<% @cpe_events.each do |cpe_event| %>
<tr data-link="<%= cpe_course_description_live_path(cpe_event, :format => 'html') %>" >
<td><%= cpe_event.id %></td>
.....
这是 jQuery:
$(document).ready(function() {
$("tr").click(function() {
window.location = $(this).data("link");
})
})
这是控制器:
def cpe_course_description_live
@cpe_event = CpeEvent.find(params[:id])
@user = current_user
redirect_to cpe_course_description_live_path(cpe_event)
end
如能为我指明正确的方向,我们将不胜感激。谢谢
很难确定,但我想这是因为我们的路线。您使用的路线似乎不是成员路线,而是一个集合。这很可能就是为什么你在“。”之后得到你的 id 的原因。在格式类型通常会显示的 url 中。
您永远不需要提供 "html" 格式,因为它是默认格式。如果你 post 从你的 routes.rb 文件中找到合适的路由,我相信这会显示问题
您还可以看到 url 是通过您的 运行 方法从控制台生成的 运行 生成的。
$ ~/code/my_app/rake routes | grep cpe_course_description_live
编辑:经过一些研究,我们发现自定义路由存在问题。路线应该是这样的:
get '/cpe_events/:id/description_live(.:format)', to: 'cpe_events#cpe_course_description_live', as: 'cpe_course_description_live'
这允许将 :id
添加到控制器中的参数哈希并通过 params[:id]
访问。这本质上就是集合路由和成员路由的区别。为此,我们需要会员的 ID。
我按照 SO # 9945620 的示例,Making a table row into a link in Rails 发送到控制器的参数是 {"controller"=>"cpe_events", "action"=>"cpe_course_description_live", "format"=>"15"}
我假设 format
是由 [=56= 自动生成的].但是,我不明白为什么它采用行/记录的 id
以及为什么 cpe_events params
或 id
没有被传递。
编辑:我应该注意到 table 是使用 Bootstrap、class="span12 table table-hover table-striped table-bordered"
呈现的,因为它也是用 jQuery.
完整代码在注释下方。
这是引发错误的数据-link:
<tr data-link="<%= cpe_course_description_live_path(cpe_event) %>" >
参考示例中使用了该格式。我控制台网络部分的 link 显示为 cpe_course_description_live_path.15
但是,控制器 @cpe_event = CpeEvent.find(params[:id])
无法读取 id
如果我把它改成:
<tr data-link="<%= cpe_course_description_live_path(cpe_event, :format => 'html') %>" >
它正确发送格式。参数现在是 {"controller"=>"cpe_events", "action"=>"cpe_course_description_live", "format"=>"html"}
,控制台的网络部分显示为 cpe_course_description_live_path.html
底线:没有将参数或 ID 传递给控制器。
这是视图/table代码:
<% @cpe_events.each do |cpe_event| %>
<tr data-link="<%= cpe_course_description_live_path(cpe_event, :format => 'html') %>" >
<td><%= cpe_event.id %></td>
.....
这是 jQuery:
$(document).ready(function() {
$("tr").click(function() {
window.location = $(this).data("link");
})
})
这是控制器:
def cpe_course_description_live
@cpe_event = CpeEvent.find(params[:id])
@user = current_user
redirect_to cpe_course_description_live_path(cpe_event)
end
如能为我指明正确的方向,我们将不胜感激。谢谢
很难确定,但我想这是因为我们的路线。您使用的路线似乎不是成员路线,而是一个集合。这很可能就是为什么你在“。”之后得到你的 id 的原因。在格式类型通常会显示的 url 中。
您永远不需要提供 "html" 格式,因为它是默认格式。如果你 post 从你的 routes.rb 文件中找到合适的路由,我相信这会显示问题
您还可以看到 url 是通过您的 运行 方法从控制台生成的 运行 生成的。
$ ~/code/my_app/rake routes | grep cpe_course_description_live
编辑:经过一些研究,我们发现自定义路由存在问题。路线应该是这样的:
get '/cpe_events/:id/description_live(.:format)', to: 'cpe_events#cpe_course_description_live', as: 'cpe_course_description_live'
这允许将 :id
添加到控制器中的参数哈希并通过 params[:id]
访问。这本质上就是集合路由和成员路由的区别。为此,我们需要会员的 ID。