Я использую 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"
Так что я погуглил и обнаружил, что @message может быть нулем, но я не могу понять причину.
Форма "просмотр / отправка / новая /" выглядит следующим образом:
<% 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"}}
Я изменил некоторые строки в "rout.rb", но я думаю, что это не главное здесь.
Может, кто-то получил подсказку?
Greets