我正在运行Rails 3并希望拥有一个消息系统。 以下是它的教程:http://www.novawave.net/public/rails_messaging_tutorial.html
这是Rails 2所以我试图在Rails 3中实现它。
但是在我构建了“/ view / sent / index /”并尝试发送消息(即使没有人无法读取它)后,我收到了一个错误:
Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id
app/models/message.rb:16:in `prepare_copies'
app/models/message.rb:14:in `each'
app/models/message.rb:14:in `prepare_copies'
app/controllers/sent_controller.rb:19:in `create'
我的“发送”控制器看起来像:
def create
@message = current_user.sent_messages.build(params[:message])
if @message.save
flash[:notice] = "Message sent."
redirect_to :action => "index"
else
render :action => "new"
end
end
第19行将是“if @ message.save”
所以我用Google搜索并发现@message可能是零,但我无法理解为什么。
“view / sent / new /”表单如下:
<% form_for :message, :url => {:controller => "sent", :action => "create"} do |f| %>
<p>
To:<br />
<select name="message[to][]">
<%= options_from_collection_for_select(User.find(:all), :id, :username, @message.to) %>
</select>
</p>
<p>Subject: <%= f.text_field :subject %></p>
<p>Body:<br /> <%= f.text_area :body %></p>
<p><%= f.submit %></p>
<% end %>
在错误页面上,参数提交正确:
Parameters:
{"commit"=>"Save Message",
"authenticity_token"=>"GtJEl2DnKHy06e3IepnnZU0u9RWNlO7gDOx/7FyXFBo=",
"utf8"=>"✓",
"message"=>{"body"=>"test",
"to"=>["2"],
"subject"=>"test"}}
我改变了“routes.rb”中的一些行,但我认为这不是重点。 也许有人有提示?
迎接
答案 0 :(得分:5)
根据教程,这里是错误的代码:
message_copies.build(:recipient_id => recipient.id, :folder_id => recipient.inbox.id)
因此,收件人为零或收件人.inbox为零。据推测它是后者,因为select填充了现有用户。在创建用户时,在前挂钩中创建用户的收件箱。是否所有用户都是通过应用创建的?
打开rails控制台并尝试User.find(2)和User.find(2).inbox。如果这些都不是nil,你可能必须使用调试器或在代码中放置一些打印来确定什么是nil和为什么。