我是Ruby新手,現在在將應用程序部署到Heroku後遇到錯誤。應用程序在Localhost上正常工作,但在Heroku上有NoMethodError(undefined方法` - '爲零:NilClass)Heroku
我在本地主機上測試我的應用程序,一切工作正常;然而,當我嘗試保存一篇新文章時,Heroku上的「nil:NilClass」有「未定義方法 - 」。我在StackOverflow上搜索瞭解決方案,但到目前爲止我還沒有找到任何東西。
錯誤,我從Heroku的日誌有:
2015-04-01T03:37:23.412066+00:00 app[web.1]: NoMethodError (undefined method `-' for nil:NilClass):
2015-04-01T03:37:23.412076+00:00 app[web.1]: app/controllers/topics/posts_controller.rb:22:in `create'
2015-04-01T03:37:23.412074+00:00 app[web.1]: app/models/post.rb:37:in `save_with_initial_vote'
2015-04-01T03:37:23.407819+00:00 app[web.1]: (1.0ms) ROLLBACK
2015-04-01T03:37:23.412070+00:00 app[web.1]: app/models/vote.rb:20:in `update_post'
2015-04-01T03:37:23.412078+00:00 app[web.1]:
2015-04-01T03:37:23.412063+00:00 app[web.1]:
2015-04-01T03:37:23.412068+00:00 app[web.1]: app/models/post.rb:30:in `update_rank'
2015-04-01T03:37:23.412072+00:00 app[web.1]: app/models/post.rb:39:in `block in save_with_initial_vote'
從日誌中,它看起來像這個問題是從post.rb. update_rank方法
從我的應用程序/模型/ post.rb:
class Post < ActiveRecord::Base
has_many :comments, dependent: :destroy
has_many :votes, dependent: :destroy
has_many :favorites, dependent: :destroy
belongs_to :user
belongs_to :topic
default_scope { order('rank DESC') }
scope :visible_to, ->(user) { user ? all : joins(:topic).where('topics.public' => true) }
validates :title, length: { minimum: 5 }, presence: true
validates :body, length: { minimum: 20 }, presence: true
validates :topic, presence: true
validates :user, presence: true
def update_rank
age_in_days = (created_at - Time.new(1970,1,1))/(60 * 60 * 24)
new_rank = points + age_in_days
update_attribute(:rank, new_rank)
end
def save_with_initial_vote
ActiveRecord::Base.transaction do
post = Post.create
user.votes.create(value: 1, post: self)
end
end
從應用/控制器/主題/ posts_controller.rb:
def create
@topic = Topic.find(params[:topic_id])
@post = current_user.posts.build(post_params)
@post.topic = @topic
authorize @post
if @post.save_with_initial_vote
flash[:notice] = "Post was saved."
redirect_to [@topic, @post]
else
flash[:error] = "There was an error saving the post. Please try again."
render :new
end
end
型號/ vote.rb:
after_save :update_post
def up_vote?
value == 1
end
def down_vote?
value == -1
end
def update_post
post.update_rank
end
我已經運行「heroku rn db:migrate」和「heroku restart」,但是錯誤依然存在。我的rails版本是4.2.0,我的Ruby版本是2.0.0。
有誰知道是什麼原因以及如何使它在Heroku上工作?
update_post在哪裏被調用? – 2015-04-01 06:05:26
@Antarr Byrd:after_save:update_post在models/vote.rb中,我也在我的問題中加入了它,謝謝! – 2015-04-01 06:12:36