0

更新 #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ビューで

私が数えようとしているのは、ユーザーのプロフィール ビューの数です。ウェブサイト全体でユーザー名をクリックすると、そのユーザーのプロフィールに移動します。プロファイルがクリックされた回数のカウンターを表示したいだけです。

ありがとう

4

1 に答える 1