更新2我已经让它工作了,但是我如何使它计数每次刷新呢?即使我刷新了用户的配置文件(例如/user/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当我在Said的答案中进行下面的更改并在"Widget“控制器和”Widget“模块中尝试它时,我现在得到了这个错误:
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迁移。
然后我在app\控制器中创建了一个新的“小部件”控制器文件
WidgetsController < ApplicationController
def show
@widget = Widget.find
impressionist(@widget)
end
end然后我在app/ model中创建了一个新的"Widget“模型
class Widget < ActiveRecord::Base
is_impressionable
end然后我又说
<%= @widget.impressionist_count %>在show.html.erb视图中
我试图计算的是用户配置文件视图的#。整个网站,你可以点击一个用户名,它将进入他们的个人资料。我只想显示他们的资料被点击了多少次。
谢谢
发布于 2013-03-06 05:55:39
问题似乎是在表演中,相反:
@widget = Widget.find尝尝这个
@widget = Widget.find(params[:id])更新: 1
应该将is_impressionable添加到用户模型中。
https://stackoverflow.com/questions/15239141
复制相似问题