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 

前のコードを使用すると、アクションを明示的に宣言しない限り、データベースでは nil になり、OP のビュー コードがエラーをトリガーします。したがって、track_activity の 2 番目のバージョンを使用する方が安全です。

これを指摘してくれた@jvnillのコメントに感謝します

于 2013-02-21T03:58:04.813 に答える