从表行链接到新视图生成:格式=>单击行的ID 为啥?导轨

Posted

技术标签:

【中文标题】从表行链接到新视图生成:格式=>单击行的ID 为啥?导轨【英文标题】:link from table row to new view generating :format => id of clicked row Why? Rails从表行链接到新视图生成:格式=>单击行的ID 为什么?导轨 【发布时间】:2016-04-10 01:18:58 【问题描述】:

我按照 SO # 9945620, Making a table row into a link in Rails 的示例发送到控制器的参数是 "controller"=>"cpe_events", "action"=>"cpe_course_description_live", "format"=>"15" 我假设 format 是由 rails 自动生成的。但是,我不明白为什么它采用行/记录的 id 以及为什么 cpe_events paramsid 没有被通过。

编辑:我可能应该注意到表格是使用 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

底线:不将参数或 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

任何为我指明正确方向的帮助将不胜感激。谢谢

【问题讨论】:

【参考方案1】:

很难确定,但我认为这是因为我们的路线。看来您使用的路由不是成员路由,而是集合。这很可能就是为什么您在“。”之后获取您的 id 的原因。在通常显示格式类型的 url 中。

您永远不需要提供“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[:id] 访问。这本质上是收集路由和成员路由之间的区别。在这种情况下,我们需要成员的 id。

【讨论】:

感谢您的回复。我从视图中删除了:format =&gt; html,还删除了我错误地添加到路线中的post 路线。这是路由:GET /cpe_course_description_live(.:format) cpe_events#cpe_course_description_live 我现在又得到了:format =&gt; 15,15 是 id。传递的参数是:"controller"=&gt;"cpe_events", "action"=&gt;"cpe_course_description_live", "format"=&gt;"15" 我相信我的路线应该类似于show route, e.g., /cpe_course_description/:id(.:format)`,但是,我不知道为什么没有生成。 这里是原始视图的控制器代码:def cpe_events_list @cpe_events = CpeEvent.where(:submitted_by == 'sponsor') .where('class_date &gt;= ?', Date.today) end 如果问题是我有一个集合而不是一个对象,我该如何解决它。再次感谢,道格 get '/cpe_events/:id/description_live(.:format)', to: 'cpe_events#cpe_course_description_live', as: 'cpe_course_description_live' 我会使用上面的路线来得到你想要的。路径以您的复数型号名称开头。然后是所需的:id,后跟操作名称。最后是可选的(.:format)() 表示参数是可选的。 :id 不是可选的。因此,当您执行 cpe_course_descroption_live_path(15) 时,15 最终会出现在控制器中的 params[:id] 中。 那行得通。谢谢!请编辑您的原始答案,我会接受它,以便您获得信用。此外,除了 RailsGuides:Rails Routing from the Outside In 之外,还有其他读物可以推荐我花时间阅读吗?再次感谢,道格

以上是关于从表行链接到新视图生成:格式=>单击行的ID 为啥?导轨的主要内容,如果未能解决你的问题,请参考以下文章

为啥向现有行添加新行时,链接/联结表行的主 ID 会发生变化?

TextView 链接到新的布局视图 Android

MySQL 从表中获取数据并检查表行中是不是存在用户 ID

Angular JS - 从表中删除行的问题

使用 jquery 在引导程序中获取选定表行的值

表行 onclick - 更改页面,或打开新标签