Rails:发布日期未正确更新

时间:2018-10-25 15:15:16

标签: ruby-on-rails ruby

我在其中一个应用程序上有一个基本的博客设置。每个blog都有一个布尔值表示是否为published,然后是一个日期为published_onpublished_onnil,直到用published作为true更新为止。控制器逻辑是这样的:

  def create
    @blog = Blog.new(blog_params)
    @blog.user_id = current_user.id
    if @blog.published
      @blog.published_on = Time.now
    end

    respond_to do |format|
      if @blog.save
        format.html { redirect_to @blog, notice: 'Blog was successfully created.' }
        format.json { render :show, status: :created, location: @blog }
      else
        format.html { render :new }
        format.json { render json: @blog.errors, status: :unprocessable_entity }
      end
    end
  end

还有更新...

  def update
    if @blog.published && @blog.published_on.nil?
      @blog.published_on = Time.now
    end
    ...
  end

但是,更新功能无法更新,并且在undefined method 'strftime' for nil:NilClass页面上显示的位置出现了show错误。当我rails c储存时,published_on没有保存。

我应该放置什么而不是控制器中当前使用的Time.now逻辑。 blog#create可以正常工作,但是blog#update出了点问题。

2 个答案:

答案 0 :(得分:1)

我认为控制器可能在错误的位置。您可以在模型中实现after_save回调。您可以在此处设置时间戳self.published_on = DateTime.now if self.published

after_save :set_published_at

def set_published_at 
  self.published_on = DateTime.now if self.published
end

答案 1 :(得分:0)

您是否尝试过使用DateTime.now而不是Time.now?它们是不同的类,我不确定可以将datetime属性直接分配给Time对象。

@blog.published_on = DateTime.now