我有这个后台工作,每天通过resque-scheduler运行一次
@user = User.all
@user.each do |u|
current_user = u.id #this does not doe the job
twt = Tweet.where(user_id: u.uid).where(status_id: 0).order(:created_at, :id).first
if twt
twt.status_id = 1
twt.save
$client.update(twt.text)
end
目前,此代码会将所有推文更新$client.update(twt.text)
发送给首次登录的用户。我想要它做的是将twitter oauths当前用户设置为@user.each do |u|
每个循环中当前选定的用户,并将推文发布到其特定帐户。如何在用户未主动登录时更改current_user属性?
更新
current_user由user.rb中的这些方法确定
def self.from_omniauth(auth)
where(provider: auth.provider, uid: auth.uid).first_or_create do |user|
user.provider = auth.provider
user.uid = auth.uid
user.name = auth.info.name
user.oauth_token = auth.credentials.token
user.oauth_secret = auth.credentials.secret
user.save!
end
end
然后在sessions_controller中设置current_user
class SessionsController < ApplicationController
def create
user = User.from_omniauth(env["omniauth.auth"])
session[:user_id] = user.id
if Subscription.where(user_id: current_user.uid).present?
redirect_to root_path
else
redirect_to new_subscription_path
end
end
def destroy
session[:user_id] = nil
redirect_to root_path
end
def session_params
params.require(:user_id).permit!
end
end