从表格行链接到新视图生成:format => 点击行的 id 为什么?导轨



我以SO#9945620为例,在Rails中创建一个表行作为链接。发送到控制器的参数是{"controller"=>"cpe_events", "action"=>"cpe_course_description_live", "format"=>"15"}。我假设format是由Rails自动生成的。然而,我不明白它为什么采用行/记录的id,以及为什么没有传递cpe_events paramsid

EDIT:我可能应该注意到,该表是使用Bootstrap class="span12 table table-hover table-striped table-bordered"呈现的,因为它也是用jQuery编写的。

以下注释下方的完整代码。

以下是引发错误的数据链接:<tr data-link="<%= cpe_course_description_live_path(cpe_event) %>" >引用的示例中使用了该格式。控制台网络部分的链接读取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

底线:不将params或id传递给控制器。

这是视图/表格代码:

<% @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

如果能为我指明正确的方向,我们将不胜感激。感谢

这有点难以确定,但我认为这是因为我们的路线。您使用的路由似乎不是成员路由,而是集合。这很可能就是为什么你会在url中的"."之后获得你的id,而格式类型通常会出现在该位置。

您永远不需要提供"html"格式,因为它是默认格式。如果你从routes.rb文件中发布合适的路线,我相信这会显示问题

您还可以通过在控制台中运行以下命令来查看cpe_course_description_live_path方法生成的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散列中,并通过params[:id]进行访问。这本质上是集合路由和成员路由之间的区别。为此,我们需要成员的id。

最新更新