Что здесь происходит, так это то, что эта строка:
@channel = Channel.find(params[:channel_id])
падает, потому что в хэше params нет определенного channel_id. Я вижу, что вы используете неглубокие маршруты, что означает, что ваш URI, вероятно, выглядит следующим образом:
/messages
И вам нужно, чтобы он выглядел так:
/channels/1/messages
Попробуйте изменить свой URL на:
channel_messages_url(@channel)
вместо
messages_url
Это предположение, кстати, может быть из-за того, как вы определили свой routes.rb
, что выглядит немного странно, потому что вы определяете маршруты сообщений дважды, один раз с has_many и снова как правильный ресурс. , Вы, вероятно, хотите что-то вроде:
# assuming you need shallow routes
resources :channels, :shallow => true do |channels|
channels.resources :messages
end