有人可以向我解释这段代码在做什么吗?

时间:2017-07-12 11:37:27

标签: ruby-on-rails ruby

我目前正在修建在线课程,但我无法访问与某门课程相关的课程。

我的开发人员朋友为我解决了这个问题,但我不确定为什么这个代码有效,如果有不同的方式,更多的是Rails传统方式来编写这段代码。

<% @courses.each do |course| %>
    <tr>
      <td><%= link_to course.title, "courses/#{course.id}" %></td>
    </tr>
  <% end %>

我不确定这部分"courses/#{course.id}"正在做什么。有没有办法用更传统的看似名称路径助手来写这个?

3 个答案:

答案 0 :(得分:4)

它应与course_path(course)

相同

这个电话只是为你找出路径。代码中的表达式只是构建了这个路径,将"courses/"和课程的id放在一起(但使用插值,而不是连接)。

答案 1 :(得分:0)

正如Ursus的回答所解释的那样,courses/#{course.id}通过使用字符串插值创建指向特定课程路径的URL。例如,如果@courses变量是包含ID为[1, 2, 3]的课程对象的数组,那么您将收到指向"course/1", "course/2", course/3"的链接。

要替换该插值,您只需编写

即可
<%= link_to course.title, course %>

它将创建与"courses/#{course.id}"

相同的输出

要了解有关字符串插值的更多信息,请从此处开始:http://ruby-for-beginners.rubymonstas.org/bonus/string_interpolation.html

答案 2 :(得分:0)

出于某种原因,你的朋友这样做了:

<td><%= link_to course.title, "courses/#{course.id}" %></td>

......而不是:

<td><%= link_to course.title, course %></td>

......我不明白为什么。第二个例子是你如何在Rails中使用链接。第一个示例不保护您免受将来可能的URL更改。