rails 3自定义日期不会保存

时间:2011-10-25 16:50:50

标签: ruby-on-rails-3

我是一个完整的铁杆菜鸟,所以我可能会在这里找到一些非常简单的东西。我有这些叫做微博的小推文类型的东西,我希望每个微博都有一个由用户设置的发布日期。我的表单看起来没问题,并且在创建新的微博时浏览器中没有显示任何错误,但发布日期没有保存在数据库中。在我创建新微博的形式中,我有这个:

<div class="field">
  <%= f.label :release_date %>
  <%= f.text_field :release_date, :size => 10 %>
</div>

在我的数据库架构中,我有:

  create_table "microposts", :force => true do |t|
    t.string   "content"
    t.integer  "user_id"
    t.datetime "created_at"
    t.datetime "updated_at"
    t.datetime "release_date"
  end

我在我的Micropost模型中可以访问release_date属性,如下所示:

attr_accessible :content, :release_date

我的Micropost控制器中的create方法如下所示:

def create
  @micropost = current_user.microposts.build(params[:micropost])
  if @micropost.save
    flash[:success] = "New event created."
    redirect_to root_path
  else
     render 'pages/home'
  end
end

其他一切都保存得很好。这只是发布日期似乎被忽略了。这只是一个疯狂的猜测,但是像10/25/2011这样的东西被保存为日期时间吗?或者是应该将其保存为字符串然后解析为正确的日期时间格式?

2 个答案:

答案 0 :(得分:0)

这里有很多信息需要评估。 params hash可能没有值,或者没有以rails预期的方式进行哈希处理。

在您的用户模型中,您有:

accepts_nested_attributes_for :microposts

此外,您还需要在rails中查找form_for和fields_for上的教程。

答案 1 :(得分:0)

您输入日期的格式可能无法正确投射到日期时间:

def Micropost < ActiveRecord::Base
  before_validation_on_create :convert_release_date_to_datetime

  private

    def convert_release_date_to_datetime
      self.release_date = Time.parse(release_date)
    end
end