Неопределенный метод `user_path'ошибка при добавлении Gem Public Activity
У меня есть простое приложение rails, и я пытаюсь добавить на него канал активности. Для этого я использую Gem Public Activity и следил за этим Railscast
но теперь это дает мне ошибку:
undefined method `user_path' for #<#<Class:0x4a8b288>:0x4a90a30>
Мои коды:
activities_controller.rb
class ActivitiesController < ApplicationController
def index
@activities = PublicActivity::Activity.order("created_at desc")
end
end
Моя активность index.html.erb файл
<h1>feeds</h1>
<% @activities.each do |activity| %>
<div class="activity">
<%= link_to activity.owner.full_name, activity.owner if activity.owner %>
added comment to <%= link_to activity.trackable.shipment.name.activity.trackable.shipment %>
</div>
<% end %>
Мой файл comment.rb
class Comment < ActiveRecord::Base
include PublicActivity::Model
tracked owner: ->(controller, model) { controller && controller.current_user }
belongs_to :shipment
belongs_to :user
end
Мой файл rout.rb
Rails.application.routes.draw do
get 'profiles/show'
get 'pages/homepage'
devise_for :users, :controllers => {:registrations => "registrations"}
resources :shipments do
member do
get "like", to: "shipments#upvote"
end
resources :comments
end
# The priority is based upon order of creation: first created -> highest priority.
# See how all your routes lay out with "rake routes".
root "shipments#index"
get '/:id', to: 'profiles#show'
get 'activities/index'
get "mailbox/inbox" => "mailbox#inbox", as: :mailbox_inbox
get "mailbox/sent" => "mailbox#sent", as: :mailbox_sent
get "mailbox/trash" => "mailbox#trash", as: :mailbox_trash
resources :conversations do
member do
post :reply
post :trash
post :untrash
end
end
end
Так что если кто-то может помочь, как выйти из этого. Заранее спасибо.
трассировки стека
Rendered activities/index.html.erb within layouts/application (122.0ms)
Completed 500 Internal Server Error in 306ms (ActiveRecord: 155.0ms)
ActionView::Template::Error (undefined method `user_path' for #<#<Class:0x4b8158
8>:0x4b88560>):
1: <h1>fgfgh</h1>
2: <% @activities.each do |activity| %>
3: <div class="activity">
4: <%= link_to activity.owner.full_name, activity.owner if activity.owne
r %>
5: added comment to <%= link_to activity.trackable.shipment.name.activit
y.trackable.shipment %>
6: </div>
7: <% end %>
app/views/activities/index.html.erb:4:in `block in _app_views_activities_index
_html_erb__319514432_39684012'
app/views/activities/index.html.erb:2:in `_app_views_activities_index_html_erb
__319514432_39684012'
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/actionpack-4.2.3
/lib/action_dispatch/middleware/templates/rescues/_source.erb (2.0ms)
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/actionpack-4.2.3
/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb (5.0ms)
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/actionpack-4.2.3
/lib/action_dispatch/middleware/templates/rescues/_request_and_response.html.erb
(1.0ms)
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/actionpack-4.2.3
/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb within
rescues/layout (144.0ms)
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/web-console-2.2.
1/lib/web_console/templates/_markup.html.erb (1.0ms)
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/web-console-2.2.
1/lib/web_console/templates/_inner_console_markup.html.erb within layouts/inline
d_string (0.0ms)
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/web-console-2.2.
1/lib/web_console/templates/_prompt_box_markup.html.erb within layouts/inlined_s
tring (1.0ms)
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/web-console-2.2.
1/lib/web_console/templates/style.css.erb within layouts/inlined_string (1.0ms)
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/web-console-2.2.
1/lib/web_console/templates/console.js.erb within layouts/javascript (83.0ms)
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/web-console-2.2.
1/lib/web_console/templates/main.js.erb within layouts/javascript (0.0ms)
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/web-console-2.2.
1/lib/web_console/templates/error_page.js.erb within layouts/javascript (1.0ms)
Rendered C:/RailsInstaller/Ruby2.0.0/lib/ruby/gems/2.0.0/gems/web-console-2.2.
1/lib/web_console/templates/index.html.erb (203.0ms)
Маршруты на терминале
DL is deprecated, please use Fiddle
Prefix Verb URI Pattern
Controller#Action
profiles_show GET /profiles/show(.:format)
profiles#show
pages_homepage GET /pages/homepage(.:format)
pages#homepage
new_user_session GET /users/sign_in(.:format)
devise/sessions#new
user_session POST /users/sign_in(.:format)
devise/sessions#create
destroy_user_session GET /users/sign_out(.:format)
devise/sessions#destroy
user_password POST /users/password(.:format)
devise/passwords#create
new_user_password GET /users/password/new(.:format)
devise/passwords#new
edit_user_password GET /users/password/edit(.:format)
devise/passwords#edit
PATCH /users/password(.:format)
devise/passwords#update
PUT /users/password(.:format)
devise/passwords#update
cancel_user_registration GET /users/cancel(.:format)
registrations#cancel
user_registration POST /users(.:format)
registrations#create
new_user_registration GET /users/sign_up(.:format)
registrations#new
edit_user_registration GET /users/edit(.:format)
registrations#edit
PATCH /users(.:format)
registrations#update
PUT /users(.:format)
registrations#update
DELETE /users(.:format)
registrations#destroy
like_shipment GET /shipments/:id/like(.:format)
shipments#upvote
shipment_comments GET /shipments/:shipment_id/comments(.:format)
comments#index
POST /shipments/:shipment_id/comments(.:format)
comments#create
new_shipment_comment GET /shipments/:shipment_id/comments/new(.:format)
comments#new
edit_shipment_comment GET /shipments/:shipment_id/comments/:id/edit(.:form
at) comments#edit
shipment_comment GET /shipments/:shipment_id/comments/:id(.:format)
comments#show
PATCH /shipments/:shipment_id/comments/:id(.:format)
comments#update
PUT /shipments/:shipment_id/comments/:id(.:format)
comments#update
DELETE /shipments/:shipment_id/comments/:id(.:format)
comments#destroy
shipments GET /shipments(.:format)
shipments#index
POST /shipments(.:format)
shipments#create
new_shipment GET /shipments/new(.:format)
shipments#new
edit_shipment GET /shipments/:id/edit(.:format)
shipments#edit
shipment GET /shipments/:id(.:format)
shipments#show
PATCH /shipments/:id(.:format)
shipments#update
PUT /shipments/:id(.:format)
shipments#update
DELETE /shipments/:id(.:format)
shipments#destroy
root GET /
shipments#index
GET /:id(.:format)
profiles#show
activities_index GET /activities/index(.:format)
activities#index
mailbox_inbox GET /mailbox/inbox(.:format)
mailbox#inbox
mailbox_sent GET /mailbox/sent(.:format)
mailbox#sent
mailbox_trash GET /mailbox/trash(.:format)
mailbox#trash
reply_conversation POST /conversations/:id/reply(.:format)
conversations#reply
trash_conversation POST /conversations/:id/trash(.:format)
conversations#trash
untrash_conversation POST /conversations/:id/untrash(.:format)
conversations#untrash
conversations GET /conversations(.:format)
conversations#index
POST /conversations(.:format)
conversations#create
new_conversation GET /conversations/new(.:format)
conversations#new
edit_conversation GET /conversations/:id/edit(.:format)
conversations#edit
conversation GET /conversations/:id(.:format)
conversations#show
PATCH /conversations/:id(.:format)
conversations#update
PUT /conversations/:id(.:format)
conversations#update
DELETE /conversations/:id(.:format)
conversations#destroy
1 ответ
Проблема с этим утверждением:
<%= link_to activity.owner.full_name, activity.owner if activity.owner %>
activity.owner
это User
объект и будет генерировать user_path
ссылка (обычно /user/<owner_id>
)
Я думаю тебе нужен
resources :users
линия в вашем config.rb
(который, вероятно, должен быть завернут в authenticated :user do
блок)
Дополнительная информация:
link_to
call генерирует ссылку на страницу владельца активности.
Вам нужно, чтобы контроллер обслуживал страницу с информацией о владельце. Поскольку владелец User
модель (вы написали devise_for :users
), activity.owner
это User
объект.
когда link_to
видит User
объект, который он пытается вызвать user_path(owner.id)
создать URL-адрес HTTP для этого пользователя. Чтобы это работало, вам нужен такой маршрут в вашем файле config.rb.
Когда вы добавляете resources :user
линия к вашему config.routes
и соответствующий UsersController
(и просмотрите) вы создаете конечную точку HTTP для показа / создания / редактирования пользователей.
Я предлагаю вам просмотреть Railscast, объясняющий Devise.