0

我正在与 Railscast 407(这是一个专业/付费剧集)一起工作,其中 Ryan Bates 将公共活动功能添加到一个站点,即每个活动(创建或更新食谱或对食谱的评论)都显示在公共提要中。在创建应用程序的某一时刻,他使用下面的代码从 /views/activities 文件夹中渲染出部分内容,但是,他还添加了一个注释子文件夹,因此创建部分路径是这样views/activities/comment/_create.html.erb的,指向它的链接是这样的

<%= render "activities/#{activity.trackable_type.underscore}/#{activity.action}", activity: activity %>



<h1> Activities </h1>

<% @activities.each do |activity| %>
    <%= div_for activity do %>
    <%= link_to activity.user.name, activity.user %>
    <%= render "activities/#{activity.trackable_type.underscore}/#{activity.action}", activity: activity %>
    <% end %>
<% end %>

我很确定我正确复制了他的代码,但是当我尝试跟随时出现此错误,

The partial name (activities/comment/) is not a valid Ruby identifier; make sure your partial name starts with a letter or underscore, and is followed by any combinations of letters, numbers, or underscores.

然而,他在这一集中没有得到那个错误。这是一个截图在此处输入图像描述 这是他的目录的截图在此处输入图像描述

仅供参考,这一集这一阶段的实际部分看起来像这样

commented on <%= link_to activity.trackable.recipe.name, activity.trackable.recipe %>

你能解释一下为什么这对我不起作用吗?

4

1 回答 1

0

在这一集中的某一时刻,Ryan Bates 在跟踪活动的方法中(在应用程序控制器中)将默认操作设置为 nil

  def track_activity(trackable, action = nil)
    current_user.activities.create! action: action, trackable: trackable
  end 

但是,他后来将默认更改为像这样的参数操作

def track_activity(trackable, action = params[:action])
    current_user.activities.create! action: action, trackable: trackable
  end 

如果您使用以前的代码,那么除非您明确声明该操作,否则它在 db 中将为 nil,然后 OP 中的视图代码将触发错误。因此,使用 track_activity 的第二个版本更安全。

感谢@jvnill 的评论指出这一点

于 2013-02-21T03:58:04.813 回答