无法将nil转换为确切的数字

时间:2013-01-31 12:52:42

标签: ruby-on-rails

我希望用户能够评论其他人的微博,但我不断收到以下错误:无法将nil转换为确切的数字

它来自下面的View / comments / _form文件中的时间戳。出于某种原因,@ comment.created_at回来为nil

查看/评论/ _form :(在每个微博结束时调用此部分)

<span class="content"><%= @comment.content %></span>
<span class="timestamp">Said <%= time_ago_in_words(@comment.created_at) %> ago.</span
<%= form_for(@comment) do |f| %>
  <%= f.text_field :content, placeholder: "Say Something..." if signed_in? %>
<% end %>

用户模型:

attr_accessible :name, :email, :password, :password_confirmation #is this secure with password there?
attr_protected :admin   #attr_protected necessary?
has_many :microposts, dependent: :destroy
has_many :comments, :through => :microposts, dependent: :destroy

Micropost模型:

attr_accessible :comment #basically the content of the post
attr_protected :user_id
has_many :comments, dependent: :destroy

评论模型:

attr_accessible :content, :micropost
belongs_to :user
belongs_to :micropost
validates :user_id, presence: true
validates :micropost_id, presence: true
validates :content, presence: true
default_scope order: 'comments.created_at ASC'   #is this necessary?

评论控制器:

def create
  @micropost = Micropost.find_by_id(params[:id])   #is this necessary?
  @comment = current_user.comments.create(:micropost => @micropost)
  redirect_to :back
end

用户控制器:

def show
  @user = User.find_by_id(params[:id])
  @microposts = @user.microposts.paginate(page: params[:page])
  @micropost  = current_user.microposts.build
  @comments = @micropost.comments
  @comment = current_user.comments.create(:micropost => @micropost) #build, new or create??
end

路线:

resources :users 
resources :microposts, only: [:create, :destroy] 
resources :comments, only: [:create, :destroy]

SQL:

“注释”=&GT; { “内容”=&gt; “中。实施例”}}   用户负载(0.8ms)SELECT“users”。* FROM“users”WHERE“users”。“remember_token”='H09yZpAv5qhmT3ok5fXfnQ'LIMIT 1   Micropost Load(0.7ms)SELECT“microposts”。* FROM“microposts”WHERE“microposts”。“id”IS NULL

2 个答案:

答案 0 :(得分:0)

@comment很可能是created_at设置为nil

的新记录

答案 1 :(得分:0)

尚未创建@micropost

@micropost.save

之后添加@micropost = current_user.microposts.build
@micropost  = current_user.microposts.build
@micropost.save
@comments = @micropost.comments
@comment = current_user.comments.create(:micropost => @micropost)