我正在使用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.
然而,他没有在剧集中得到那个错误。这是截图这是他的目录
的屏幕截图Fyi,这一集的现阶段的实际部分看起来像这样
commented on <%= link_to activity.trackable.recipe.name, activity.trackable.recipe %>
你能解释为什么这对我不起作用吗?
答案 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发表评论指出