部分来自文件夹

时间:2013-02-21 03:49:23

标签: ruby-on-rails

我正在使用Railscast 407(这是一个专业/付费剧集),其中Ryan Bates为网站添加了公共活动功能,即每个活动(创建或更新食谱或对食谱的评论)都显示在公共Feed中。在创建应用程序时,他使用下面的代码从/ 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.

然而,他没有在剧集中得到那个错误。这是截图enter image description here这是他的目录enter image description here

的屏幕截图

Fyi,这一集的现阶段的实际部分看起来像这样

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

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

1 个答案:

答案 0 :(得分: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发表评论指出