更新 #2 動作していますが、各更新をカウントするにはどうすればよいですか? ユーザーのプロファイル (たとえば、/users/3) を更新しても、それをカウントしたいのです。
Widget.rb
class Widget < ActiveRecord::Base
is_impressionable
def impressionist_count
impressions.size
end
end
ウィジェット コントローラー
WidgetsController < ApplicationController
def show
@widget = Widget.find(params[:id])
impressionist(@widget,message:"wtf is a widget?") #message is optional
end
end
ユーザーモデルに Is_Impressionable を追加
show.html.erbビューに使用しているコードは次のとおりです
<%= @user.impressionist_count(:filter=>:all) %>
更新#1 サイードの回答で以下に示す変更を行い、「ウィジェット」コントローラーと「ウィジェット」モジュールで試してみると、次のエラーが発生します。
NoMethodError in Users#show
undefined method `impressionist_count' for nil:NilClass
これがuser.rbです
class User < ActiveRecord::Base
attr_accessible :name, :email, :password, :password_confirmation
has_secure_password
has_many :microposts, dependent: :destroy
has_many :impressions, :as=>:impressionable
has_many :relationships, foreign_key: "follower_id", dependent: :destroy
has_many :followed_users, through: :relationships, source: :followed
has_many :reverse_relationships, foreign_key: "followed_id",
class_name: "Relationship",
dependent: :destroy
has_many :followers, through: :reverse_relationships, source: :follower
before_save { |user| user.email = user.email.downcase }
before_save :create_remember_token
validates :name, presence: true, length: { maximum: 50 }
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, format: { with: VALID_EMAIL_REGEX },
uniqueness: { case_sensitive: false }
validates :password, length: { minimum: 6 }
validates :password_confirmation, presence: true
def following?(other_user)
relationships.find_by_followed_id(other_user.id)
end
def follow!(other_user)
relationships.create!(followed_id: other_user.id)
end
def unfollow!(other_user)
relationships.find_by_followed_id(other_user.id).destroy
end
def feed
Micropost.from_users_followed_by(self)
end
def impressionist_count
impressions.size
end
private
def create_remember_token
self.remember_token = SecureRandom.urlsafe_base64
end
end
ここにユーザーコントローラーがあります
class UsersController < ApplicationController
before_filter :signed_in_user,
only: [:index, :edit, :update, :destroy, :following, :followers]
before_filter :correct_user, only: [:edit, :update]
before_filter :admin_user, only: :destroy
def index
@users = User.paginate(page: params[:page]).all
end
def show
@user = User.find(params[:id])
@microposts = @user.microposts.paginate(page: params[:page])
end
def new
@user = User.new
end
def create
@user = User.new(params[:user])
if @user.save
sign_in @user
flash[:success] = "Demoapp!"
redirect_to root_url
else
render 'new'
end
end
def edit
end
def update
if @user.update_attributes(params[:user])
sign_in @user
flash[:success] = "Profile updated"
redirect_to @user
else
render 'edit'
end
end
def destroy
User.find(params[:id]).destroy
flash[:success] = "User destroyed"
redirect_to users_path
end
def following
@title = "Follow"
@user = User.find(params[:id])
@users = @user.followed_users.paginate(page: params[:page])
render 'show_follow'
end
def followers
@title = "Following"
@user = User.find(params[:id])
@users = @user.followers.paginate(page: params[:page])
render 'show_follow'
end
private
def correct_user
@user = User.find(params[:id])
redirect_to root_path unless current_user?(@user)
end
def admin_user
redirect_to root_path unless current_user.admin?
end
end
元の投稿 以下で何が間違っていましたか?
gem を追加し、db migration を実行しました。
次に、app\controllers に新しい「Widgets」コントローラー ファイルを作成しました。
WidgetsController < ApplicationController
def show
@widget = Widget.find
impressionist(@widget)
end
end
次に、アプリ/モデルに新しい「ウィジェット」モデルを作成しました
class Widget < ActiveRecord::Base
is_impressionable
end
それから私は追加しました
<%= @widget.impressionist_count %>
show.html.erbビューで
私が数えようとしているのは、ユーザーのプロフィール ビューの数です。ウェブサイト全体でユーザー名をクリックすると、そのユーザーのプロフィールに移動します。プロファイルがクリックされた回数のカウンターを表示したいだけです。
ありがとう